sql语句优化小技巧

本文整理了几个常用的SQL优化技巧,包括unionall效率高于union、count(*)速度优于count(1)、合理使用分组与having、条件表达式优化等。同时介绍了设置索引的正确方式和常见导致索引失效的情况。最后通过实例展示了where条件执行顺序对查询效率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在开发中,可能很多的程序员都比较关注比较大的数据库的优化技术,例如 分表分库、读写分离、 缓存 等等。从而忽略了一些 可以从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的员工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值