mysql优化和sql语句优化总结
Posted hhhshct
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql优化和sql语句优化总结相关的知识,希望对你有一定的参考价值。
mysql性能优化
1、 EXPLAIN 你的 SELECT 查询。使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
2、为搜索字段建索引,一般来说,应该在这些列 上创建索引,例如:
在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
在经常用在连接的列上,这 些列主要是一些外键,可以加快连接的速度;
在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的; 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
3、对于某些值在特定范围的值存储(例如:性别),字段类型使用 ENUM 而不是 VARCHAR。
4、从 PROCEDURE ANALYSE() 取得建议,只有表中有实际的数据,这些建议才会变得有用,在sql语句后面加上PROCEDURE ANALYSE()。
5、尽可能的使用 NOT NULL,除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。
6、把IP地址存成 UNSIGNED INT。
7、固定长度的表会更快,尽量少用varchar。
8、垂直分割,把不常用的字段单独成表。
9、数据量越小的列会越快,如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些,当然,你也需要留够足够的扩展空间。
10、选择正确的存储引擎,MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。
sql语句性能优化
1、能用inner join连接尽量使用inner join连接,一种简单的优化就是用innerjoin的方法来代替子查询;使用JOIN时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小,如果有条件应该放到左边先处理,right join同理反向),同时尽量把牵涉到多表联合的查询拆分多个query(多个表查询效率低,容易锁表和阻塞)。
2、避免因sql语句不当而致使索引无效的情况,常见的有:
在索引列进行运算或者使用函数导致索引失效;
在sql中使用 <> 、not in 、not exist、!=,or,like "%_" 百分号在前,where后使用IS NULL、IS NOT NULL或者使用函数,会使索引失效。
3、limit千万级分页的时候优化(使用between and)而不是limit m,n。
4、使用批量插入节省交互(最好是使用存储过程)
5、避免sql语句中传参和数据库表中字段数据类型不一致
6、分组统计可以禁止排序,ORDER BY NULL禁止排序,禁止不必要的ORDER BY排序
7、当只要一行数据时使用 LIMIT 1,你已经知道结果只会有一条结果或者只需要一条数据,加上 LIMIT 1 可以增加性能。
以上是关于mysql优化和sql语句优化总结的主要内容,如果未能解决你的问题,请参考以下文章