最进项目原因,看了一些sql优化的建议特此总结一下。
- 索引列中避免null
在sql语句中任何包含null的值的列都不会被包含在索引中,也就是所我们在设计表的时候最好将带有索引的列设置默认值,这样避免出现null导致索引失效。 - in ,or ,between
可以使用in时候别使用or,可以使用between时别使用in - !=,not
select * from user where salary<3000 or > salary > 3000.
和
select * from user where salay!=3000
使用前者,第一种允许使用索引,第二种不允许 - 避免在索引上计算
低效: SELECT … FROM USER WHERE SAL * 12 > 25000;
高效: SELECT … FROM USER WHERE SAL > 25000/12; - 用>= 替换 >
高效: SELECT * FROM EMP WHERE APPLE >=5
低效: SELECT * FROM EMP WHERE APPLE >4
区别在于第一个会直接跳到等于5的那条记录,而第二条会首先定位到4然后再扫描 - 尽量避免使用select *
这个是个老生常谈的问题,还是为了节省资源和网络开销,每次查询时最好只查询需要的字段即可 - 如果确定只会返回一个结果使用limit 1
好处在于一是可以避免业务出错,其二还能提高查询效率,查到后直接返回结果 - 数字比字符型查询更快
在同等情况下,如果能够确定字段内存储均为数字,最好是将其设为数字类型,提高查询效率。 - like模糊查询不可前置百分比
我们在使用like进行模糊查询时,不可将百分号放在最前面,会导致无法使用索引,而进行全文搜索。