欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MYSQL慢查询优化方法及优化原则

程序员文章站 2022-10-20 18:12:52
1、日期大小的比较,传到xml中的日期格式要符合'yyyy MM dd',这样才能走索引,如:'yyyy'改为'yyyy MM dd','yyyy MM'改为'yyyy MM dd'【这样MYSQL会转换为日期类型】 2、条件语句中无论是等于、还是大于小于, 左侧的条件查询字段不要使用函数或表达式或 ......

1、日期大小的比较,传到xml中的日期格式要符合'yyyy-mm-dd',这样才能走索引,如:'yyyy'改为'yyyy-mm-dd','yyyy-mm'改为'yyyy-mm-dd'【这样mysql会转换为日期类型】

2、条件语句中无论是等于、还是大于小于,where左侧的条件查询字段不要使用函数或表达式或数学运算

3、where条件语句尝试着调整字段的顺序提升查询速度,如把索引字段放在最前面、把查询命中率高的字段置前等

4、保证优化sql前后其查询结果是一致的

5、在查询的时候通过将explain命令写在查询语句前,测试语句是否有走索引【具体用法百度】

6、禁止使用select * from操作,应只返回需要的字段,不需要的字段不要返回

7、可以尝试分解复杂的查询,在应用层面进行表关联,以此代替sql层面的表关联

8、where子句和order by子句涉及到的列建索引

9、避免在where子句中对字段进行null判断【可以对表字段改造一下,字符串型字段默认值设置为空字符串,数字型字段默认值设置为0,日期型字段默认值设置为1990-01-01等】

10、避免在where子句中使用!=<>操作符

11、避免在where子句中使用or操作符

12、between and代替in

13、like '%abc%'不会走索引,而like 'abc%'会走索引

14、避免对字段进行表达式操作

15、避免对字段进行函数操作

16、group by操作默认会对group by后面的字段进行排序,如果你的程序不需要排序,可在group by语句后面加上order by null去除排序

17、如果是数值型字段,则尽量设计为数值型字段,不要为了方便、为了偷懒而给后面维护的同事埋坑

18、表中所有字段设计为not null

19、返回条数固定时,用limit语句限制返回记录的条数,如只需要一条记录,或肯定只有一条记录符合条件,那建议加上limit 1

20、对于枚举类型的字段【即有固定罗列值的字段】,建议使用enum而不是varchar,如性别、星期、类型、类别等

21、对于存ip地址的字段设计为成unsigned int

22、避免在sql中使用now()curdate()rand()函数【因为这种方式会导致mysql无法使用sql缓存】,可以转化为通过传入参数的方式

23、对于统计类的查询【如查询连续几个月的数据总量,或查询同比、环比等】,可以通过定时查询并统计到统计表的方式提高查询速度