mysql优化
sql的书写规范:
1.表名需要有意义
2.注释 单行注释 -- 多行注释 /* */
3.缩进
4.空格
5.大小写 关键字用大写 表名列名用小写
sql技巧:
1.CASE WHEN THEN ...ELSE END 用于查询 或者用于修改
2.HAVING 一般和聚合函数一起使用的 也可单独使用 count(*)
3.自连接 删除重复行 排序
4.COALESCE函数 可以对null值进行转换 COALESCE(city,‘N/A‘)
sql优化:
1.参数是子查询的时候 用EXISTS 代替IN (用在where后面 只返回两个值 true和false)
原因:可以使用索引 避免全表扫描 不会产生临时表
2.避免排序
会产生排序的运算
GROUP BY
ORDER BY
聚合函数(SUN AGV COUNT MAX MIN)
DISTINCT
集合运算符(UNION INTERSECT EXCEPT)
窗口函数(RANK ROW_NUMBER)
如果在内存上排序还好 但如果内存不足导致需要在硬盘上排序的话 性能会急剧下降 所以需要减少不必要的排序
1)UNION 更改为UNION ALL 会查询所有的数据 包括重复的
2)用EXISTS代替DISTINCT
3)在极值函数中使用索引 (也会进行全表查询 不会索引中本身就是有顺序的)
4)能写在WHERE 中的条件不写在HAVING中
5)在GROUP BY和ORDER BY中使用索引 可以根据索引中的顺序省略排序
6)使用索引的时候 字段应该是原始字段
3.尽量避免使用否定形式 不会命中索引 < > != NOT IN
4.进行默认类型转换
5.减少中间表 内存的消耗 原始表的索引不容易找到
6.需要对多个字段进行IN查询的时候 将他们汇总到一处
7.使用联合索引的时候 遵循最左原则
8.LIKE的时候 遵循最左原则
9.简单字符串表达式
10.尽量使用自增id作为主键
主键的原则:自增 尽量小 不对主键进行修改
11.优化count(*)