1、在表中建立索引,优先考虑where、group by使用到的字段(较频繁地作为查询条件且唯一性不太差),不会再where中用到的字段不建立索引,因为建立索引也需要系统的开销。
2、减少使用 * ,用列名代替
select * from user;
要写成 select userID, userName, userSalary from user;
因为在使用 * 的时候,数据库还得查询数据字典,进而解析得到列名,而直接写出列名效率会更高些。
3、避免在开头使用模糊查询(%),该查询数据库引擎会放弃索引进行全表扫描。
4、避免进行NULL值判断,可以给字段添加默认值0,对0值进行判断;
也不要给数据库留NULL,使用NOT NULL填充。(否则会进行全表扫描,影响效率)
5、避免在where条件中等号的左边进行表达式或函数操作,可以将表达式或函数移到等号右边。(否则会全表扫描)
6、当使用where子句连接的时候,要把能过滤掉最大数量记录的条件写在最右边。(因为where是从右往左解析的)
7、需要删除所有记录的时候,用truncate而不用detele
因为delete删除表的时候,会扫描整个表再一条一条删除;
而truncate会一次性删除整个表的所有内容,不进行扫描,效率高。
8、当where和having都用的时候,先用where,再用having;where先过滤(数据量变少),再分组,效率高。
9、避免使用in和not in,会导致全表扫描
优化方式:如果是连续数值,用between代替;如果是子查询,用exists代替。
10、如果表名或列名过长,就使用别名,因为长的表名和列名也会消耗扫描时间。