本文系 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 Cleft join Orders as Oon 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

转载于:https://www.cnblogs.com/SunnyZhu/p/5715497.html

【Sql server: T-Sql 技术内幕 系列】之索引篇相关推荐

  1. RDS SQL Server死锁(Deadlock)系列之四利用Service Broker事件通知捕获死锁

    问题引入 在前面三篇文章,我们分别谈到了使用DBCC命令捕获死锁:使用Profiler界面跟踪Deadlock Graph事件捕获死锁和使用脚本自动部署Profiler Trace捕获死锁.这篇文章介 ...

  2. SQL Server 2005 性能优化实战系列(文章索引)

    http://www.cnblogs.com/gaizai/archive/2012/01/20/2327814.html 前言 性能优化是数据库方向一个很重要的技能,这也是快速提供企业级应用性能最快 ...

  3. 《SQL Server 2005开发技术大全》分享一本书

    数据库是一个非常重要的领域,不管是什么样的系统,都必须要与数据库打交道,因此作为一个程序员来讲,数据库的基本知识技能是必须要掌握的. 我接触C#已经有两年半的时间了吧,在学习之初是接触微软的Visua ...

  4. SQL Server 2005全文检索技术在网站上的应用实录

    SQL Server 2005全文检索技术在网站上的应用实录 一.前言 "人类失去搜索,世界将会怎样?",同样,很难想象一个拥有极大信息量的行业网站门户没有站内全文搜索将会出现怎样 ...

  5. 《MS SQL Server 2000管理员手册》系列——8. 管理 Microsoft SQL Server 服务

    8. 管理 Microsoft SQL Server 服务 SQL Server 服务组件 使用SQL Server服务管理员 使用 Windows 2000 服务控制管理员 使用 SQL Serve ...

  6. 快速迁移数据中心:华为云数据库SQL Server实践案例技术解析

    1.   简介 企业或用户将数据中心部署在线下,采用独立软件提供商(Independent Software Vendor)软件进行管理.线下数据运维成本较高,故障容灾单一化,是目前遇到的瓶颈.采用云 ...

  7. SQL Server “Denali” ---SQL 2012 新特性

    SQL Server "Denali" 作为云就绪信息平台中的关键组件,可以帮助企业释放突破性的业务洞察力:它对关键业务充满信心,能够快速地构建相应的解决方案来实现本地和公有云之间 ...

  8. linux启动sql server数据库,SQL Server数据库启动过程详解及启动不起来的问题分析及解决方法...

    第五步.启动系统数据库model model系统数据库同样也是SQL Server启动过程中用到的一个非常关键的数据库,如果这个库损坏,SQL Server启动也会失败,关于model数据不能启动的原 ...

  9. aws rds监控慢sql_探索AWS RDS SQL Server上SQL Server集成服务(SSIS)

    aws rds监控慢sql In the previous article, Deploy tabular databases in SSAS on AWS RDS SQL Server, we ex ...

最新文章

  1. 译者招募 | 这本“顶级”微积分教材,中文版要来了!
  2. ubuntu9.10上安装jdk5
  3. Airtable(数据管理)
  4. Linux:批量清空当前目录下的日志文件
  5. 一个发布app测试版本的网站
  6. [Qt入门]QMainWindow创建
  7. 前端学习(3124):react-hello-react之批量传递props
  8. 高效程序员应该养成的七个习惯
  9. AndroidStudio使用入门
  10. springBoot+JSP搭建项目
  11. 设计模式——单例模式八种方式实现与分析(附代码示例)
  12. 最全的搜索引擎入口和分类目录入口
  13. 论坛——迪文屏常用操作
  14. oracle 帮助文件,oracle chm帮助文件下载
  15. node 插件下载 安装 数据库引入
  16. 锚框之间的IOU理解
  17. rz安装 xshell_Linux与windows之间文件传输工具RZSZ安装(Xshell或CRT)
  18. 性能测试之cpu监控的结论
  19. 三本计算机的专业需要考研嘛,三本计算机考研难吗
  20. C++复习(二十)——拉丁方阵数字排序

热门文章

  1. 从圆的面积说起 循环小数 PI
  2. Stream 和Byte[] 之间的转换
  3. Asp.net(C#)-彩色图片转化为黑白
  4. SQL Server 2005 在建立与服务器的连接时出错,错误26收藏
  5. 2011阿里巴巴集团实习生招聘笔试题 CC++
  6. UA MATH571A 多元线性回归I 模型设定与推断
  7. 用表格布局2个链接6个图片
  8. Behavior行为
  9. 蓝桥杯 黄金连分数(BigDecimal的使用)
  10. 大话设计模式-备忘录模式