一、日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改成'yyyy-MM-dd','yyyy-MM'改成'yyyy-MM-dd'【这样MYSQL会转换为日期类型】缓存
二、条件语句中不管是等于、仍是大于小于,WHERE
左侧的条件查询字段不要使用函数或表达式或数学运算函数
三、WHERE
条件语句尝试着调整字段的顺序提高查询速度,如把索引字段放在最前面、把查询命中率高的字段置前等测试
四、保证优化SQL先后其查询结果是一致的优化
五、在查询的时候经过将EXPLAIN
命令写在查询语句前,测试语句是否有走索引【具体用法百度】设计
六、禁止使用SELECT * FROM
操做,应只返回须要的字段,不须要的字段不要返回code
七、能够尝试分解复杂的查询,在应用层面进行表关联,以此代替SQL层面的表关联xml
八、WHERE
子句和ORDER BY
子句涉及到的列建索引排序
九、避免在WHERE
子句中对字段进行NULL
判断【能够对表字段改造一下,字符串型字段默认值设置为空字符串
,数字型字段默认值设置为0
,日期型字段默认值设置为1990-01-01
等】索引
十、避免在WHERE
子句中使用!=
或<>
操做符字符串
十一、避免在WHERE
子句中使用OR
操做符
十二、BETWEEN AND
代替IN
1三、LIKE
'%abc%'不会走索引,而LIKE
'abc%'会走索引
1四、避免对字段进行表达式操做
1五、避免对字段进行函数操做
1六、GROUP BY
操做默认会对GROUP BY
后面的字段进行排序,若是你的程序不须要排序,可在GROUP BY
语句后面加上ORDER BY NULL
去除排序
1七、若是是数值型字段,则尽可能设计为数值型字段,不要为了方便、为了偷懒而给后面维护的同事埋坑
1八、表中全部字段设计为NOT NULL
1九、返回条数固定时,用LIMIT
语句限制返回记录的条数,如只须要一条记录,或确定只有一条记录符合条件,那建议加上LIMIT 1
20、对于枚举类型的字段【即有固定罗列值的字段】,建议使用ENUM
而不是VARCHAR
,如性别、星期、类型、类别等
2一、对于存IP地址的字段设计为成UNSIGNED INT
型
2二、避免在SQL中使用NOW()
、CURDATE()
、RAND()
函数【由于这种方式会致使MYSQL没法使用SQL缓存】,能够转化为经过传入参数的方式
2三、对于统计类的查询【如查询连续几个月的数据总量,或查询同比、环比等】,能够经过定时查询并统计到统计表的方式提升查询速度