MySQL_调优
创建索引
- 尽量避免全表扫描,在 Where 和 Order By 涉及到的列上建立索引。
- 在经常使用的字段上建立索引。
- 索引中不要包含有 null 值的列。
避免在索引上使用计算
原因:
如果索引是计算的一部分,那么查询将不会使用索引,而是全表扫描。
程序中尽量使用参数化的SQL语句
原因:
- 避免 SQL 注入漏洞攻击。
- 数据库在第一次会对参数化的 SQL 进行预编译,这样以后在执行这条 SQL 的时候会直接使用预编译的结果,从而大大提高执行速度。
用 Where 关键字替换 Having
原因:
Having 会检索出所有的结果之后才对结果集进行过滤,而 Where 则是在聚合前筛选。
使用表的别名
原因:
多个表进行链接时,使用表的别名,可以减少解析时间。
用 Union All 替换 Union
原因:
使用 Union 关键字进行聚合,即使结果集中不存在重复的记录,也会再次进行合并,然后输出结果排序。
查询 Select 语句优化
- 不要使用 select * from ,用具体的字段代替 * 。
- 避免在 Where 子句中进行 null 值判断,因为这将导致数据库放弃使用索引而进行全表扫描。
- 如果必须使用 like 语句,请使用 like “aaa%” (会使用索引)样式,因为 like “%aaa%” 样式的不会使用索引。
- 不要在列上进行计算,列上进行计算,不会使用索引。
- 不要使用 Not In 和 <> 。因为这两个关键字都不会使用索引。可以使用 Not Exists 和 (a > 1 or a < 1)替换。