【Sql server: T-Sql 技术内幕 系列】之索引篇
本文系 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 numOrders
from Customers as C
left join Orders as O
on C.CustomerID=O.CustomerID
where C.Cite='Shanghai'
Group by C.CustomerID
having 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

【Sql server: T-Sql 技术内幕 系列】之索引篇的更多相关文章
- SQL Server 临时表和表变量系列之选择篇
原文地址:https://yq.aliyun.com/articles/69187 摘要: # 摘要 通过前面的三篇系列文章,我们对临时表和表变量的概念.对比和认知误区已经有了非常全面的认识.其实,我 ...
- (初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建
原文:(初稿)SQL Server 复制(Replication)系列(2)--事务复制搭建 本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为 ...
- SQL Server数据库应用技术
SQL Server数据库应用技术 SQL是Structured Query Language的缩写.SQL是操作命令集,是一种功能齐全的数据库语言.SQL功能强大.简单.易学.使用方便,已经成为了数 ...
- SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005
New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...
- .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
- PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法
逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...
- [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)
原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin update 某个sqlserver的表@dblink名字 .... ...
- (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)
本文转载自:http://blog.csdn.net/xiaoxu0123/article/details/5684680 [SQL Server] 动态sql给变量赋值(或返回值给变量) decla ...
随机推荐
- 【转】C#、面向对象、设计模式学习
源地址:http://www.cnblogs.com/cj723/archive/2007/04/02/697431.html
- oracle闪回存储过程
源地址:https://www.baidu.com/link?url=qgVCi_BLGOYqxJN0Fqqt-9N0SmCwtGI70SIh-TFpx1nP6oaVoMj8H6yjEqilto6TM ...
- Django 项目重命名
在日常学习工作过程中,我们难免需要复用以前的项目,这里讲下复用 Django 项目并重命名的过程. 1.修改项目名称,使用 pycharm -> refactor 重命名整个项目. 2.修改 m ...
- loj2289 [THUWC 2017]在美妙的数学王国中畅游(LCT+Taylor展开)
link 题目大意: 你需要维护一个树 每个点都有个sin(ax+b)或exp(ax+b)或ax+b 你需要维护一些操作:连边.删边.修改某个点的初等函数.询问某条树链上所有函数带入某个值后权值和或不 ...
- feign调用过程注意事项
Feign是Netflix开发的声明式.模板化的HTTP客户端, Feign可以帮助我们更快捷.优雅地调用HTTP API. 在Spring Cloud中,使用Feign非常简单——创建一个接口,并在 ...
- 链表 206 Reverse Linked List, 92,86, 328, 2, 445
表不支持随机查找,通常是使用next指针进行操作. 206. 反转链表 /** * Definition for singly-linked list. * struct ListNode { * i ...
- Python- sort()/sorted()
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. sorted(iterable,key=None,revers ...
- 记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)
题目是这个样子的: code.txt的内容是这样: 有点吓人木?233333 其实解密之后是这样的: 找到一点安慰没? 好了,废话不多说.讲解一下思路吧. 我们知道base64加密是属于可逆加密的.简 ...
- Jsch初步
[From] http://xpenxpen.iteye.com/blog/2061869 上一篇文章我们成功搭建了sshd服务器,并通过3种方式登陆上了ssh.这一篇我们将用开源jar包jsch来登 ...
- Scrapy安装指南(windows)
windows开发,难免遇到很多坑,比一般开发是艰苦得多.先不吐槽windows,我们直接看这个scrapy怎么安装. 首先,要有一份文档,比如我用这个: http://scrapy-chs.read ...