从一个简单的SQL来聊聊等价改写
今天看到一个库的cpu告警,去看了下top sql就发现了一个奇葩的SQL。
不得不吐槽下,都2022年了,还有在索引列上用函数的写法。。
其实也很好理解这个SQL是希望查询时间列是当天(current_date)的,但是由于该时间列是timestamp类型的,而current_date的结果是date类型的,所以开发人员将这两个时间用函数进行了截断。
那这个SQL该怎么优化呢,可能大部分人第一反应是加个函数索引不就好了,不过说实话函数索引大部分都显得有些多余,尤其是该列上都已经存在一个索引了,那么我们有没有什么办法对这个SQL进行等价改写呢?
进行SQL等价改写关键其实在于了解需求,而这个SQL的需求很简单:获取时间是当天的数据。
因此该SQL可以改写为:
条件改成了r.occur_time >= current_date and r.occur_time < current_date+1,,改写完之后用上了索引,cost从289238降到了5,时间也是大大降低。
看上去不等的写法其实相等,说白了等价改写其实最主要的是了解需求!
这让我想到了之前一个十分经典的等价案例:
begin select count(*) into v_cnt from t1 ; if v_cnt>0 then …A逻辑…. else then …B逻辑….. End;
这个需求大致如下:
获取t1 表的记录数,判断是否大于0,如果大于0走A逻辑,否则就走B逻辑。 因此代码就如上所示来实现了,可真正的需求是这样吗?
其实应该是这样的:只要T1表有记录就走A逻辑,否则走B逻辑。
两者有区别吗?其实区别还是很大的,前者可是强调获取记录数,我们是不是一定要遍历整个表得出一个记录数才知道是否大于0?
真正需求的理解可以让我们这样实现,只要从T1表中成功获取到第一条记录,就可以停止检索了,表示该表有记录了,难道事实不是这样?
因此原先的SQL可以修改为:
begin select count(*) into v_cnt from t1 where rownum=1; if v_cnt=1 then …A逻辑…. else then …B逻辑….. End;
总结:
有的时候优化SQL了解需求也是一大捷径,需要考虑将需求最小化,具备少做事的意识乃是顶级优化。
从一个简单的SQL来聊聊等价改写相关推荐
- 一个简单的SQL注入攻击
在上一篇博客中:http://blog.csdn.net/suwei19870312/article/details/7579667.讲了Client 端代码和Server端代码的交互. Client ...
- 震惊!阿里的程序员竟被一个简单的 SQL 查询难住了!
作者 | 唐磊 责编 | Carol 来源 | 程序猿石头 封图 | CSDN 付费下载于视觉中国 最近工作上遇到一个"神奇"的问题,或许对大家有帮助,因此形成本文. 问题大概是, ...
- PLY库-实现最简单的sql语法的数据库
本文通过PLY实现一个简单的sql库 本文主要简述一下,有关语法解析的库的使用,并使用改实例编写一个简单的模仿最基本的sql语句的数据库,本文代码仅供示例参考. 语法解析与上下文 语法解析是一个比较大 ...
- 还在用 AI 和机器学习?简单的 SQL 脚本就能替代!
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! [CSDN编者按]现在,AI和机器学习无疑是超级热门的技术,很多开发者也都闻风转向人工智能领 ...
- oracle向前推一个小时,oracle SQL里常用的时间函数,经典推荐
oracle SQL里常用的时间函数,经典推荐 (2009-03-11 23:16:54) 标签: 杂谈 常用日期型函数 1.Sysdate 当前日期和时间 SQL> Select sysdat ...
- 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷
使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 使用ANTLR做一个简单的Python SQL语法解析器 - 推酷 posted on 2016-11-14 13:11 lexus ...
- 用一个简单的例子说明SQL子查询
SQL的子查询(subqueries) 用一个简单的例子来说明subqueries的应用. 现有两个表格,第一个表格名为student,第二个表格名为student_information. 第一个表 ...
- 聊聊高并发(十六)实现一个简单的可重入锁
可重入锁指的是假设一个线程已经获得了一个锁,那么它能够多次进入这个锁,当然前提是线程须要先获得这个锁. 可重入锁是最常使用的锁.Java的内置锁就是可重入锁,使用synchronizedkeyword ...
- 10年+SQL性能优化专家谈SQL等价改写核心思想
墨墨导读:2020数据技术嘉年华于11月21日落下帷幕,大会历时两天,来自全国各地的数据领域学术精英.领袖人物.技术专家.从业者和技术爱好者相聚北京,见证了个人的快速成长.技术的迭代进步.行业的蓬勃发 ...
最新文章
- order by居然不能直接在union子句中使用
- Java项目几个月能完成_c#项目转JAVA,第5个月,基本完成
- 微软360游戏机改服务器,战斗民族就是干高玩将Xbox 360改装成PC简直改装达人
- 关于lazyman你还应该知道这几件事
- python-appium520-2初步使用
- 关于华为S27000交换机在局域网中的一些简单配置
- python布尔类型运算_Python3 布尔类型
- Apache安装apr和apr-util作用
- 第一讲 OC简介及基本语法
- 图像评价常用指标(PSNR、SSIM、LPIPS 、FID、Recall)
- AWS学习日志之SAA
- CloudCompare使用说明
- 多元线性回归的缺陷_多元线性回归常见问题
- MT2601平台L1.MP9版本DWS配置方法
- 属于拼多多的巴别塔正在构筑
- MySQL-count(*)、count(1)、count(主键)、count(非索引列)、count(索引列)性能分析
- RocketMQ吐血整理
- 17.深入浅出:非正弦波发生电路——参考《模拟电子技术基础》清华大学华成英主讲
- 电脑游戏录屏哪个好用免费?这2款录屏软件,用过都说好!
- ZKFinger Live20R 版对接java - B/S(网络版)