一、查询SQL尽量不要使用select *,而是具体字段
1、反例
SELECT * FROM user
2、正例
SELECT id,username,tel FROM user
3、理由
- 节省资源、减少网络开销。
- 可能用到覆盖索引,减少回表,提高查询效率。
注意:为节省时间,下面的样例字段都用*代替了。
二、避免在where子句中使用 or 来连接条件
1、反例
SELECT * FROM user WHERE id=1 OR salary=5000
2、正例
(1)使用union all
SELECT * FROM user WHERE id=1
UNION ALL
SELECT * FROM user WHERE salary=5000
(2)分开两条sql写
SELECT * FROM user WHERE id=1
SELECT * FROM user WHERE salary=5000
3、理由
- 使用
or
可能会使索引失效,从而全表扫描; - 对于
or
没有索引的salary
这种情况,假设它走了id
的索引,但是走到salary
查询条件时,它还得全表扫描; - 也就是说整个过程需要三步:全表扫描+索引扫描&