天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

MS SQL Server 2005 物理查詢處理中的各個階段(二)

你真的了解T-SQL邏輯查詢嗎?提到的這種搜索方式,,也許很多人不明白(包括我,我看之前簡直感到詫異),很多都想 如果表的記錄有10000000~!#@條,那每次的CROSS JOIN 將會長生 m*n的記錄,我們就假設是1W 1w的平方還是有點點恐怖的,所以實際存儲引擎并不是如此查詢的,但是講清楚 邏輯查詢很重要,因為那是物理查詢的基礎,我覺得 理解數據庫引擎的查詢處理方式有助于 開發人員在生產過程中做出正確的選擇。PS:(有朋友說文章很多都“借鑒“別人的例子,我想是好東西用什么例子都不重要吧,只要能分享給大家,我抄都抄過來,再說是我對書的一些總結,呵呵~,這里要感謝作者Lubor Kollar,他是書中該章節的作者,是MS SQL SERVER 2005開發人員)。

那么開始吧,當一個查詢你到達數據庫引擎的時候 SQL SERVER 執行兩個主要的步驟來產生結果,一步就是 “查詢編譯”,一個是“生成查詢計劃”。首先提一下為什么存儲過程的效率總是比應用程序級別的T-SQL語句來的更迅速,首先拋開網絡傳輸T-SQL語句的時間不管,我們利用應用程序發送的T-SQL語句,交個數據庫執行,他首先就要對T-SQL語句進行編譯,在SQL中編譯的概念,和我們寫應用程序理解應該是一致的,包括語法的檢查,代數化以及查詢優化,就像我們的應用程序(我是搞.NET的),編譯器對你的C#代碼進行編譯,先檢查語法的錯誤,然后生成dlldll 中就包括對整個類庫的描述類似于SQL中的執行計劃,回到SQL中,這個編譯過程當然是需要時間的,所以應用程序級別的T-SQL 交給數據庫編譯以后才執行,更可惡的是,竟然對外部傳輸來的T-SQL語句不會進行 “過程緩存”,因為他在編譯后就立即執行了,而存儲過程他就已經預先編譯了,也進行了查詢的優化了,還會保存在“過程緩存”中,所以推薦使用存儲過程。

下面就來展示一個例子:

USE Northwind;

SELECT C.CustomerId,COUNT(o.OrderId) AS NumOrders

FROM dbo.Customers AS C

LEFT OUTER JOIN dbo.Orders AS o ON c.CustomerId=o.CustomerId

WHERE c.City='London'

GROUP BY C.CustomerId

HAVING COUNT(o.OrderId)>5

ORDER BY NumOrders;

返回結果:

EASTC       8

SEVES       9

BSBEV      10

AROUT     13

上次 就有朋友在留言中提到這個問題 ,下面我們來看看他的執行計劃,到底 邏輯處理 和物理處理 有什么不同.我們點擊 顯示估計的執行計劃” ,然后找到 最右邊的 Index seek 索引查找,下圖

2.bmp

這是我切下來的圖片,

我們看到 他的Seek 謂詞 [Northwind].[dbo].[Customers].City=N’London’

再看看 我們的查詢 語句的WHERE 部分

WHERE c.City='London'

完全 符合我在 你真的了解T-SQL邏輯查詢嗎? 一問中先說到的 第一個階段 找到FROM 的表,但是又有一點不同,物理查詢 他會等到執行CROSS 鏈接以后的 記錄,他會先直接 篩選WHERE 中的記錄 等于  3 邏輯 處理階段 連接和 4個階段WHERE 合并了.至于 這樣有什么好處呢?

我們繼續,首先我們分析 WHERE ,我們先考慮一種情況  如果 是按照 邏輯 執行階段的順序,CROSS JOIN 下來的 虛擬表 將是非常恐怖的 .可是 MS 的員工 在邏輯階段 到物理階段的過程中,肯定會采取一些列手段來優化T-SQL 語句,所以 我們聯想到 先執行WHERE 中的 邏輯處理階段 左表中的 結果 返回

相當于 執行:

USE Northwind;

SELECT C.CustomerId

FROM dbo.Customers AS C

WHERE c.City='London'

 

他返回的結果是:

 

AROUT

BSBEV

CONSH

EASTC

NORTS

SEVES

果然和我們 預想的一樣返回的 行數 完全和執行計劃中的 估計行數 : 6 行 吻合,

這樣執行的結果的好處 ,我們自然可以聯想到,6行的結果集 再來 CROSS JOIN 就小多了

,下面我們繼續剛才的分析,接著 自然是 Orders 表的鏈接,

自然 1.bmp啟用它的ON  條件, (看看Seek 謂詞)

我們再回過來看看 之前說的  物理處理階段,是不是 完全吻合. 之所以要說明白 邏輯階段,(說個題外話,有興趣的朋友可以去看看Algebrizer,他是T-SQL中的 新組件是 綁定的重要功能,我想對高數有研究的朋友可能會喜歡里面的研究和分析.他取代了2000中的Normalizer組件,在物理 邏輯 級別提高了T-SQL 效率.)

對于 后面文章的  優化查詢語句 起到了 舉足輕重的作用, 講明了 物理 處理階段和 邏輯處理階段 對于 存儲引擎是 怎么執行T-SQL 有了一定的了解,才能從原理級別去提高T-SQL ,這也是國內很多同行不曾重視的.當然本文的下一篇將繼續我們的研究 -子查詢的精要

it知識庫MS SQL Server 2005 物理查詢處理中的各個階段(二),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: YELLOW视频在线观看大全 | 在线不卡日本v二区到六区 在线不卡日本v二区 | 97视频国产| 草民电影网午夜伦理电影网 | 久久香蕉国产线看观看 | 亚洲人成电影网站色2017 | 色婷婷亚洲五月 | 波多野结衣网站www 波多野结衣教师系列6 | 久久vs国产综合色 | 善良的小峓子2在钱中文版女主角 | 日本高清加勒比 | 国产精品久久久久久久久久久 | 羞羞漫画视频 | 亚洲天堂视频网站 | 男女夜晚在爽视频免费观看 | 午夜福利电影网站鲁片大全 | 607080老太太AW| 大香伊蕉在人线国产最新 | 亚洲精品高清在线 | 午夜亚洲WWW湿好爽 午夜亚洲WWW湿好大 | 日韩欧美视频一区二区在线观看 | 青娱乐视觉盛宴国产视频 | 污污又黄又爽免费的网站 | 奶头好翘是不是想要了 | 一区二区视频在线观看高清视频在线 | 日韩精品在线看 | 激情丛林电影完整在线 | 果冻传媒独家原创在线观看 | 亚洲人女同志video | 午夜理论电影在线观看亚洲 | 伊人国产视频 | 大学生宿舍飞机china free | 99国产精品久久人妻无码 | 国产精品国产三级国AV在线观看 | JAPANRCEP老熟妇乱子伦视频 | 亚洲性无码AV久久成人 | 九九热精品在线观看 | 欧美 亚洲 另类 综合网 | 公交车被CAO到合不拢腿 | 三级网址在线播放 | 亚洲视频在线观看网站 |