设计高效sql一般经验谈
1不用在sql语句使用系统默认的保留关键字
2尽量用exists 和 not exists 代替 in 和 not in
这条在sql2005之后,在索引一样,统计信息一样的情况下,exists ,in效果是一样的。
以AdventureWorks数据库为例,查询在HumanResources.EmployeeAddress有地址的Employee信息,
用in 语句如下:
SET STATISTICS IO ON
SELECT * FROM HumanResources.Employee
WHERE EmployeeID IN (SELECT EmployeeID FROM HumanResources.EmployeeAddress ea)
SET STATISTICS IO OFF
执行后,消息如下:
(290 行受影响)
表'EmployeeAddress'。扫描计数1,逻辑读取4 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
表'Employee'。扫描计数1,逻辑读取9 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
执行计划如图
用exists ,语句如下,
SET STATISTICS IO ON
SELECT * FROM HumanResources.Employee
WHERE EXISTS(SELECT EmployeeID FROM HumanResources.EmployeeAddress ea
WHERE
HumanResources.Employee.EmployeeID=ea.EmployeeID)
SET STATISTICS IO OFF
执行后,消息如下:
(290 行受影响)
表'EmployeeAddress'。扫描计数1,逻辑读取4 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
表'Employee'。扫描计数1,逻辑读取9 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
执行计划如图:
3尽量不用select * from …..,而要写字段名 select field1,field2,…
这条没什么好说的,主要是按需查询,不要返回不必要的列和行。
4在sql 查询中应尽量使用索引列来加快查询速度
5任何在Order by 语句的非索引项或者有计算表达式都将降低查询速度
6任何在where子句中使用is null 或 is not null 的语句不允许使用索引,效率较低
7通配符%在词首时,系统不使用索引,当通配符出现在其他位置时,优化器就能利用索引
8在海量数据的sql查询语句中尽量少用格式转换
9任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等,查询时要尽可能将操作移至等号右边
10 In 、or子句常会使索引失效
11通常情况下,连接比子查询效率要高
转载于:https://www.cnblogs.com/kevinlzf/archive/2009/10/28/1591212.html
设计高效sql一般经验谈相关推荐
- [转]设计高效SQL: 一种视觉的方法
原文地址:http://www.itpub.net/thread-1357925-1-1.html 英文原文:http://www.simple-talk.com/sql/performance/de ...
- oracle 窗体翻译,[翻译]设计高效SQL: 一种视觉的方法
这篇文章是关于SQL SERVER的,但仍有参考价值. http://www.simple-talk.com/sql/p ... -a-visual-approach/ Designing Effic ...
- 高效sql性能优化极简教程
一,sql性能优化基础方法论 对于功能,我们可能知道必须改进什么:但对于性能问题,有时我们可能无从下手.其实,任何计算机应用系统最终队可以归结为: cpu消耗 内存使用 对磁盘,网络或其他I/O设备的 ...
- 万字归纳总结 | 数据库表设计与SQL编写技巧
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...
- 杨廷琨Oracle Code大会分享:如何编写高效SQL(含PPT)
快捷方式:关注本公众号,回复:yangtingkun ,即可获得大会PPT下载. 2018 Oracle Code 于5月17日在新加坡拉开帷幕.作为全球开发者交流分享的年度盛会,为吸引所有领域的开发 ...
- SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...
作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...
- MySQL DBA必读:万字归总表设计与SQL编写技巧
前言 随着移动云平台系统业务不断增长,必然需要对各系统进行更新或者发布新版本,以满足用户的需求.但是在系统更新或者发布新版本时,往往会引起各种的性能隐患,使得系统的稳定性大大降低,这些性能隐患的根本原 ...
- 2013华东数据库技术大会亮点回顾:数据库扩展性,高效SQL,MariaDB
2013年5月18日在上海举办的2013华东数据库技术大会覆盖了数据架构.数据库设计与优化.数据库产品选型.DBA从业经验等多个主题,到会的500多位用户涉及DBA.架构师.开发.BI等多种角色. \ ...
- 干货分享丨高效SQL语句编写-Oracle Code 2019中云和恩墨CTO杨廷琨的分享
导读:Oracle Code 2019 开发者大会于4月16日在深圳举行,这是甲骨文公司在中国举办的第三届Oracle Code 开发者大会.大会主要面向IT架构师和开发人员,旨在帮助开发人员深入了解 ...
最新文章
- CSS兼容性(IE和Firefox)技巧大全
- Fiddler 域名过滤
- Leetcode905.Sort Array By Parity按奇偶排序数组
- python类与对象 封装继承与多态 0308
- python需要学多长时间
- “macOS Catalina下TeXstudio内置PDF阅读器无法正常显示中文”的解决办法
- math api matrix
- nginx中配置pathinfo模式示例
- 初入WebService
- 【贪心 哈夫曼树】bzoj2923: [Poi1998]The lightest language
- java session使用_Nginx+tomcat实现session共享
- HouseMD v0.2.1 发布,比Btrace更实用运行时诊断工具
- Windows下安装libiconv库教程(转换字符编码库)
- 油猴(Tampermonkey)插件+脚本+IDM=百度网盘高速下载
- 1481c语言合法标识符,c语言试题答案集
- Fashion-mnist数据的读取与保存
- 客制化键盘编程_客制化键盘QMK固件入门-编译环境搭建
- set_input_delay/set_output_delay
- 问渠那得清如许?为有源头活水来。——java面向对象的思想
- 转载:语义网概念及技术综述
热门文章
- 常见Java面试题之如何实现对象克隆
- 如何删除以横线“-”开头的文件
- 三星I9100[4.0 固件ROM] [2012.03.15]万众期待的欧版官方4.0.3完美汉化完美教程
- 某电力企业数据备份方案解析
- Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
- AngularJS的学习笔记(一)
- 分块读取Blob字段数据(Oracle)
- POJ 3084 Panic Room
- 时结果 hive_Hive优化
- android主板接口定义,范例解析:学习Android的IPC主板模式