博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL优化快速入门
阅读量:6503 次
发布时间:2019-06-24

本文共 1018 字,大约阅读时间需要 3 分钟。

最近遇到一个专门进行SQL技术优化的项目,对很多既有的老存储过程进行调优(现在已经不再新增任何存储过程),因此系统的对SQL语句编写进行一次科学的学习变得很有必要。这儿将基于黄德承大神的Oracle SQL语句优化一书,选取其中比较实用和通用的部分进行介绍。

 

  • 任何SQL语句,只要在where子句中实用了is null或is not null,那么Oracle优化器不会使用索引。
  • 任何where子句的条件的左侧不能出现函数,否则不走索引,比如WHERE YEAR(createtime) = '2016',可以用createtime>='2016-01-01'
  • 在使用通配符%的like语句中,可以通过like 'c%'使用索引
  • order by语句,任何在order by语句的非索引项或者有计算表达式都将降低查询速度。
  • NOT和<>,会造成不走索引,应该选择使用where price<200 or price > 100。
  • IN和EXISTS,IN操作符的子查询都可以使用EXISTS代替,效率会高很多,where column in/exists (select 'X' from … where …),需要好好考虑。

Tip:

参数化SQL,like @count, '%'+ count +'%'

 

  1. 选择最优效率的表名顺序(Oracle解析器按照从右到左的顺序处理FROM子句中的表名),比如select count(*) from tab1 inner join tab2,这是优先检索表2,并将表2的数据与表1的合并。在SQL SERVER中,查看执行计划,发现并没有区别
  2. 减少查询的次数(包括对表查询),将多个分离的查询合并
  3. 能够在WHERE字句中使用的条件,尽量避免放在HAVING字句中
  4. 用EXISTS替代IN,用表连接替代EXISTS
  5. 用EXISTS替代DISTINCT,因为RDBMS会在子查询条件满足后立即返回结果
  6. 用索引来提高效率,定期的重构索引是有必要的
  7. 避免在索引列上计算
  8. 用>=代替>
  9. 注意隐式转换
  10. UNION-ALL替换UNION
  11. 在严格遵守条件的情况下(所有的列必须包含在相同的索引中并保持在索引中的排列顺序,所有的列必须定义为非空),ORDER BY子句也是可以走索引的。

转载于:https://www.cnblogs.com/xiong2ge/p/sqloptimize_fast.html

你可能感兴趣的文章
TDiocpCoderTcpServer返回数据记录有条数限制的问题
查看>>
NET Framework 3.0 (WinFX) RTM发布
查看>>
图片拼接器
查看>>
C++ TinyXml操作(含源码下载)
查看>>
读取swf里所有类定义
查看>>
DOWNLOAD 文件
查看>>
黄聪:wordpress博客用Slimbox2实现lightbox效果(免插件)(转)
查看>>
rp2833 网卡以及串口与接插件位置关系
查看>>
ogre场景图与场景内容分离
查看>>
《分析服务从入门到精通读书笔记》第一章、代理键和渐变维度(5)
查看>>
ArchLinux安装笔记(续)(桌面篇)
查看>>
中断小笔记
查看>>
C#委托、事件、消息(入门级)
查看>>
python设置windows桌面壁纸
查看>>
Visual Studio 11 Beta新特性(一):安装VS11
查看>>
通信常用概念
查看>>
PreferenceFragment 使用 小结
查看>>
FreeBinary 格式说明
查看>>
oracle相关链接
查看>>
有关奇葩的mex编程时的matlab出现栈内存错误的问题
查看>>