一个简单的SQL最优写法讨论(1)
最近在处理SQL的优化工作,拿一些碰到的例子大家一起讨论一下,希望有更多的人参与,请在发表时说明是什么数据库:
第一个语句:
SELECT A,B,C FROM T1 WHERE C>5
有没有更好的写法?
补充一下前提条件:
1.海量数据存在这个表中;
2.表中的C列值有很多,但是有重复;
A B C
A1 XE 9
AY BV 7
QM UH 5
AS UU 8
AA PO 6
JI A0 4
ER 6 9
U8 G5 6
AM EW 2
...
WE XX 67867433134
我想再等一下的,但是,没有人告诉我有什么优化的地方,我就说说我的理解和想法,各位看官请评一下,如有不对的请指教!
第一点:数据量大,多值
建立索引是必需的;
第二点:找值的理解
有了索引后,那索引可能已是以下的排序方式,我们看看会不会有可能是这样:
表: A B C
A1 XE 5
AY BV 5
QM UH 6
AS UU 4
索引:
C 地址
4 OXD001
5 OXD002
5 OXD003
6 OXD004
OK,SELECT A,B,C FROM T1 WHERE C>5 看看是否会这样
OXD002 的5和这里的条件5比较
OXD003 的5和这里的条件5比较
OXD004 的6和这里的条件5比较
结果是找到有用的6.
以上的条件放大,4有1亿行;5有3亿行;6有500万行,2有1000万行,那扫描的行数是不是会可能是3亿行+500万行?
看出点子来了吧?
我们可以改这条语句了,看看这样写:
SELECT A,B,C FROM T1 WHERE C>=6
那你又怎么理解在索引中的扫描查找过程?
OXD004 的6和这里的条件6比较
结果是找到有用的6.
我的结论:
因为我们不知道数据库引擎会怎么理解这两个语句,应该是不同的版本不同厂商有可能不同.但是,C>5有可能要扫描5有可能不用,C>=6是绝对不用扫描5(在不同的版本中是有可能的).这样,上边的扫描行数可能从这个条件中看出可能存在的差异,扫描3亿500万行还是500万行,也就可能存在10分钟与5小时或更多的差异.
请发表你的看法!
本文原创,转载请注明出处.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库