【Sql server: T-Sql 技术内幕 系列】之索引篇
生活随笔
收集整理的這篇文章主要介紹了
【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 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 技术内幕 系列】之索引篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端javascript实现二进制读写操
- 下一篇: js中对于数据类型的一些理解