1.保证不查询多余的列与行。
- 尽量避免select * 的存在,使用具体的列代替*,避免多余的列
- 使用where限定具体要查询的数据,避免多余的行
- 使用top,distinct关键字减少多余重复的行
2.慎用distinct关键字。
distinct在查询一个字段或者很少字段的情况下使用,会避免重复数据的出现,给查询带来优化效果。但是查询字段很多的情况下使用,则会大大降低查询效率。
3.慎用union关键字。
满足union的语句必须满足:1.列数相同。 2.对应列数的数据类型要保持兼容。
采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。
4.判断表中是否存在数据。
select
count
(
*
)
from
product
select
top
(
1
) id
from
product
很显然下面的一行语句完胜
5.连接查询、关联查询的优化。
首先要弄明白想要的数据是什么样子的,然后再做出决定使用哪一种连接,这很重要。
各种连接的取值大小为:
- 内连接结果集大小取决于左右表满足条件的数量
- 左连接取决于左表大小,右连接取决于右表的大小。
- 完全连接和交叉连接取决于左右两个表的数据总数量
6.操作符的使用。
(1)IN 操作符与 NOT IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,导致全表扫描。因此,在业务密集的SQL当中尽量不采用IN 和 NOT IN操作符,用EXISTS 和 NOT EXISTS 方案代替。
(2)
IS NULL 或IS NOT NULL操作
(判断字段是否为空)
避免在索引列上使用IS NULL和IS NOT NULL
如有问题,欢迎指出;如需转载,请标明出处,谢谢!