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一般经验谈相关推荐

  1. [转]设计高效SQL: 一种视觉的方法

    原文地址:http://www.itpub.net/thread-1357925-1-1.html 英文原文:http://www.simple-talk.com/sql/performance/de ...

  2. oracle 窗体翻译,[翻译]设计高效SQL: 一种视觉的方法

    这篇文章是关于SQL SERVER的,但仍有参考价值. http://www.simple-talk.com/sql/p ... -a-visual-approach/ Designing Effic ...

  3. 高效sql性能优化极简教程

    一,sql性能优化基础方法论 对于功能,我们可能知道必须改进什么:但对于性能问题,有时我们可能无从下手.其实,任何计算机应用系统最终队可以归结为: cpu消耗 内存使用 对磁盘,网络或其他I/O设备的 ...

  4. 万字归纳总结 | 数据库表设计与SQL编写技巧

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 随着移动云平台系统业务不断增长,必然需要对各系统进行 ...

  5. 杨廷琨Oracle Code大会分享:如何编写高效SQL(含PPT)

    快捷方式:关注本公众号,回复:yangtingkun ,即可获得大会PPT下载. 2018 Oracle Code 于5月17日在新加坡拉开帷幕.作为全球开发者交流分享的年度盛会,为吸引所有领域的开发 ...

  6. SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...

    作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...

  7. MySQL DBA必读:万字归总表设计与SQL编写技巧

    前言 随着移动云平台系统业务不断增长,必然需要对各系统进行更新或者发布新版本,以满足用户的需求.但是在系统更新或者发布新版本时,往往会引起各种的性能隐患,使得系统的稳定性大大降低,这些性能隐患的根本原 ...

  8. 2013华东数据库技术大会亮点回顾:数据库扩展性,高效SQL,MariaDB

    2013年5月18日在上海举办的2013华东数据库技术大会覆盖了数据架构.数据库设计与优化.数据库产品选型.DBA从业经验等多个主题,到会的500多位用户涉及DBA.架构师.开发.BI等多种角色. \ ...

  9. 干货分享丨高效SQL语句编写-Oracle Code 2019中云和恩墨CTO杨廷琨的分享

    导读:Oracle Code 2019 开发者大会于4月16日在深圳举行,这是甲骨文公司在中国举办的第三届Oracle Code 开发者大会.大会主要面向IT架构师和开发人员,旨在帮助开发人员深入了解 ...

最新文章

  1. CSS兼容性(IE和Firefox)技巧大全
  2. Fiddler 域名过滤
  3. Leetcode905.Sort Array By Parity按奇偶排序数组
  4. python类与对象 封装继承与多态 0308
  5. python需要学多长时间
  6. “macOS Catalina下TeXstudio内置PDF阅读器无法正常显示中文”的解决办法
  7. math api matrix
  8. nginx中配置pathinfo模式示例
  9. 初入WebService
  10. 【贪心 哈夫曼树】bzoj2923: [Poi1998]The lightest language
  11. java session使用_Nginx+tomcat实现session共享
  12. HouseMD v0.2.1 发布,比Btrace更实用运行时诊断工具
  13. Windows下安装libiconv库教程(转换字符编码库)
  14. 油猴(Tampermonkey)插件+脚本+IDM=百度网盘高速下载
  15. 1481c语言合法标识符,c语言试题答案集
  16. Fashion-mnist数据的读取与保存
  17. 客制化键盘编程_客制化键盘QMK固件入门-编译环境搭建
  18. set_input_delay/set_output_delay
  19. 问渠那得清如许?为有源头活水来。——java面向对象的思想
  20. 转载:语义网概念及技术综述

热门文章

  1. 常见Java面试题之如何实现对象克隆
  2. 如何删除以横线“-”开头的文件
  3. 三星I9100[4.0 固件ROM] [2012.03.15]万众期待的欧版官方4.0.3完美汉化完美教程
  4. 某电力企业数据备份方案解析
  5. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
  6. AngularJS的学习笔记(一)
  7. 分块读取Blob字段数据(Oracle)
  8. POJ 3084 Panic Room
  9. 时结果 hive_Hive优化
  10. android主板接口定义,范例解析:学习Android的IPC主板模式