设计高效sql一般经验谈
来源:互联网 发布:linux 移动文件命令 编辑:程序博客网 时间:2024/06/05 18:16
1不用在sql语句使用系统默认的保留关键字
2尽量用exists 和 not exists代替 in 和 not in
这条在sql2005之后,在索引一样,统计信息一样的情况下,exists,in效果是一样的。
以AdventureWorks数据库为例,查询在HumanResources.EmployeeAddress有地址的Employee信息,
用in语句如下:
SETSTATISTICS IO ON
SELECT* FROM HumanResources.Employee
WHERE EmployeeIDIN (SELECT EmployeeIDFROM HumanResources.EmployeeAddress ea)
SETSTATISTICS 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 ,语句如下,
SETSTATISTICS IO ON
SELECT* FROM HumanResources.Employee
WHEREEXISTS(SELECT EmployeeIDFROM HumanResources.EmployeeAddress ea
WHERE
HumanResources.Employee.EmployeeID=ea.EmployeeID)
SETSTATISTICS 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通常情况下,连接比子查询效率要高
- 设计高效sql一般经验谈
- 设计高效sql一般经验谈
- 设计高效sql一般经验谈 (转)
- SQL SERVER 2008 数据库设计经验谈
- SQL经验谈
- SQL数据库一般设计原则(一)
- 设计高效SQL: 一种视觉的方法
- 数据库设计经验谈
- 数据库设计经验谈
- 数据库设计经验谈
- [转]数据库设计经验谈
- 数据库设计经验谈
- 数据库设计经验谈
- 数据库设计经验谈(1)
- 数据库设计经验谈
- >+ 数据库设计经验谈(夜来香)
- 数据库设计经验谈
- 数据库设计经验谈
- UBUNTU10.10安装LAMP(Linux、Apache、Mysql、Php)环境教程
- Flex4之动画效果---上下,左右擦掉效果
- IIS开启GZIP压缩效率对比及部署方法
- Installshield2010实现web部署和数据库安装示例
- 文字换行
- 设计高效sql一般经验谈
- (笔记)IE6不缓存背景问题
- 集合
- JS两个日期 时间差HH:MM
- 扩展GridView控件(索引) - 增加多个常用功能
- 如何创建效率高sql-建立索引
- JS String.toDate
- SQLite内存数据库(转自:http://www.cr173.com/html/6965_1.html)
- 模拟JAVA replaceAll