从四个方面考虑SQL优化
合理创建索引:
1、对查询进行优化,要考虑尽量避免走全表扫描,考虑在where或在order by涉及字段上建立索引。
避免索引失效:
1、in和not in要慎用,否则会导致全表扫描。如下
select id from t where in(1,2,3)
可以使用where (not)exists代替in和not in,如下
select num from a where exists(select 1 from b where num=a.num)
2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3、避免在where子句中**!=和<>**操作符,否则导致索引失效而走全表扫描。
4、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。
合理创建表字段:
1、索引不是越多越好,索引固然可以提高平select效率,但是可能会降低insert、update效率,因为要重新建立索引。
2、最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库,但备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。注意是尽量不要null,请根据实际业务选择。
其他:
1、任何时候都不要使用select * from t,用具体的字段名代替"*",不要返回无用字段。
2、避免向前端返回大量数据,可以进行分页或者其他限制。
