【Sql server: T-Sql 技术内幕 系列】之索引篇
来源:互联网 发布:智慧与大数据考试答案 编辑:程序博客网 时间:2024/05/24 06:40
本文系 T-Sql技术内幕系列读后感。
用过数据库的程序猿都知道,索引可以极大的优化sql语句的执行时间,但是您要问我,怎么减少的,我只能说:"抱歉,我也不太清楚。"
带着这个疑惑,我重读了技术内幕,分享一点书上的所得。
我们先来建2个表,然后塞几条数据。
create table Customers(CustomerID int,Cite varchar(20))insert into Customers(CustomerID,Cite)values (1,'Shanghai')insert into Customers(CustomerID,Cite)values (2,'Beijing')create table Orders(CustomerID int,OrderID int)insert into Orders(CustomerID,OrderID)values(1,11)insert into Orders(CustomerID,OrderID)values(1,12)insert into Orders(CustomerID,OrderID)values(2,13)
这2个表数据很简单:
A表有客户1,所在cite="Shanghai",客户2,所在Cite="Beijing"。
B表有客户1的OrderID=11,12两条订单数据,有客户2的OrderID=13的订单数据。
我们根据上面的数据写如下Sql语句,再看下执行计划。
select c.CustomerID,COUNT(o.OrderID) as numOrdersfrom Customers as C left join Orders as O on C.CustomerID=O.CustomerIDwhere C.Cite='Shanghai'Group by C.CustomerIDhaving COUNT(o.OrderID)>=2
数据流的顺序如下图。
1.表扫描花费18%的开销,然后Sort花费63%的开销。
那我们在来看下,整个sql语句消耗多长时间。0.017s
我们给客户表和订单表建上聚集索引。
create clustered index pk_Customer on Customers(CustomerID)create clustered index pk_Customer_Order on Orders(CustomerID,OrderID)
然后再执行上面的Sql语句,得到下面的执行计划。
通过上述操作,我们发现,总时间只用0.006s了。
对于这条Sql,增加索引为我们减少了(0.017-0.006)/0.006=183%
原来增加索引,可以减少内部数据排序的时间,从来减少开销。
最后让我们看下这个结论是否正确,让我们再次回到第一个执行计划上,把鼠标放在Sort上,看他的开销。
消耗时间0.11s
0 0
- 【Sql server: T-Sql 技术内幕 系列】之索引篇
- 《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》 勘误表
- Microsoft SQL Server 2005技术内幕:T-SQL程序设计
- 《Microsoft SQL Server 2005技术内幕:T-SQL查询》 勘误表
- SQL Server 2008技术内幕:T-SQL语言基础 笔记
- SQL Server 2005技术内幕:T-SQL程序设计》:四部经典之二
- 《SQL Server 2005技术内幕:T-SQl查询》:T-SQL进阶必读
- SQL Server - 小鸟系列之T-SQL基础篇
- 《Microsoft SQL Server 2005技术内幕》系列资源汇总
- Microsoft SQL Server 2005技术内幕系列书籍
- 《SQL Server 2005技术内幕:T-SQl查询》:常见sql问题归类解答
- Microsoft SQL Server 2005技术内幕:T-SQL查询 PerformanceDB.sql
- SQL Server 2008技术内幕:T-SQL语言基础 笔记(转)
- 【SqlServer】Microsoft SQL Server 2008技术内幕:T-SQL查询 读书笔记(一)
- Microsoft SQL Server 2008技术内幕:T-SQL语言基础 第二章课后练习答案
- SQL Server 之索引
- 《Microsoft SQL Server 2005技术内幕》系列丛书
- SQL Server系列(2)--T-SQL语句
- Unity3d 调用Application.loadlevel()后光照变暗
- 简单的json解析工具
- 【POJ】-3620-Avoid The Lakes(DFS)
- hdoj 1010 <dfs剪枝>
- sftp没有关闭session导致服务器sshd进程未关闭
- 【Sql server: T-Sql 技术内幕 系列】之索引篇
- wget 下载整个网站,或者特定目录
- EditText辅助控件—TextInputLayout
- chrome input输入框黄色背景去除
- 给职场新人的10点职涯建议
- 97.Which statement is true about loading data using the conventional path of SQL*Loader?
- Ubunut服务器搭建Node服务
- apache2.2 prefork模式优化
- 链表求和