sql语句优化的小技巧(①)

来源:互联网 发布:淘宝卖家网站 编辑:程序博客网 时间:2024/05/22 18:24

在开发中,可能很多的程序员都比较关注比较大的数据库的优化技术,例如 分表分库、读写分离、 缓存 等等。从而忽略了一些 可以从sql语句中进行优化的小技巧,现在我整理了几个常用到的小技巧,希望对大家能有点用:
1、union all 的效率 比 union 的效率要高。

2、count(*) 速度要比count(1)稍快,但是 如果聚合函数中的字段为索引字段,那速度是最快的。

3、设置索引 对于经常被设置为 查询条件的字段,我们可以设置为索引,这样查询的速度 会快很多 (但是,错误的使用索引,不仅不会使查询速度 增快,反而 会大大的降低 查询速度),下面 我就举几个常见的会导致索引失效的例子:
a、查询条件中 使用了 <> ,!=
b、like “%_” 百分号在前. 模糊查询时,将 % 放在前面
c、使用 not in ,not exist(oracle) ,对于连续的数值 如 not in(3,4,5),可以用between 3 5代替
d、where 条件中 尽量不要使用 null 的判断条件 (where XX is null)
e、尽量不要在 条件链接中 使用 or 来连接 判断条件

4、使用分组(group by )查询时,where 和 having 都是对数据进行筛选,不过where是在分组前,having是在分组后。所以尽量在where条件中,将数据筛选完,因为 having 是将 select出来的数据,进行排序,计算,筛选 效率低。

5、条件中 >= 的效率 要比 > 的效率要高 ( 如果 条件为>3 ,写成>=4 效率会更高)

6、在oracle中,where 条件 的执行顺序,是由下而上的,所以 将能过滤掉最大数量的条件放于最后。
例如:
一张员工表中,男性,女性 各一半 我们 查找 年龄 大于20岁的所有男性员工姓名
低效率:select name from employ where gender = 1 and age > 20;// 先查找age>20,再查找 为男性的员工
高效率:select name from employ where age >=20 and gender =1;// 先查找 为男性的员工 再查找 age >= 20的员工。

0 0