在开发中,可能很多的程序员都比较关注比较大的数据库的优化技术,例如 分表分库、读写分离、 缓存 等等。从而忽略了一些 可以从sql语句中进行优化的小技巧,现在我整理了几个常用到的小技巧,希望对大家能有点用:
1、union all 的效率 比 union 的效率要高。
2、count(*) 速度要比count(1)稍快,但是 如果聚合函数中的字段为索引字段,那速度是最快的。
3、使用分组(group by )查询时,where 和 having 都是对数据进行筛选,不过where是在分组前,having是在分组后。所以尽量在where条件中,将数据筛选完,因为 having 是将 select出来的数据,进行排序,计算,筛选 效率低。
4、条件中 >= 的效率 要比 > 的效率要高 ( 如果 条件为>3 ,写成>=4 效率会更高哦)
5、设置索引 对于经常被设置为 查询条件的字段,我们可以设置为索引,这样查询的速度 会快很多
(但是,错误的使用索引,不仅不会使查询速度 增快,反而 会大大的降低 查询速度,下面 我就举几个常见的会导致索引失效的例子:
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 来连接 判断条件
)
6、在oracle中,where 条件 的执行顺序,是由下而上的,所以 将能过滤掉最大数量的条件放于最后。(如:
一张员工表中,男性,女性 各一半 我们 查找 年龄 大于30岁的所有女性员工姓名
低效率:
select name from employ where gender = 0 and age > 30;// 先查找age>30,再查找 为女性的员工
高效率:
select name from employ where age >=31 and gender =0;// 先查找 为女性的员工 再查找 age >= 31的员工。
)