91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL Server內幕之分析計劃

發布時間:2020-03-02 20:57:28 來源:網絡 閱讀:392 作者:易語隨風去 欄目:關系型數據庫

Analyzing plans

分析計劃


要真正了解查詢計劃并真正能夠發現、修復或解決查詢計劃的問題, 需要對組成這些計劃的查詢操作有一個扎實的理解。總的來說, 有太多的操作員可以在一章中討論它們。此外, 可以以無數的方式將這些運算符合并到查詢計劃中。因此, 本節側重于了解最常見的查詢運算符-查詢執行的最基本的構造塊, 并對 SQL server 如何使用它們構建各種有趣的查詢計劃提供一些了解。具體地說, 本節查看掃描并查找、聯接、聚合、聯合、選擇子查詢計劃和并行性。在了解這些基本操作和計劃如何工作之后, 可以讓你盡可能地分解并理解更大、更復雜的查詢計劃。


Scans and Seeks

掃描和查找


掃描和查找是 SQL server 用來從表和索引中讀取數據的迭代器。這些迭代器是 SQL server 支持的最基本的。它們幾乎出現在每個查詢計劃中。了解掃描和查找之間的不同之處很重要: 掃描處理整個表或一個索引的整個葉級別, 而查找有效地根據謂詞從索引的一個或多個范圍返回行。


首先看一下掃描的例子。請考慮以下查詢:

SELECT [OrderId] FROM [Orders] WHERE [RequiredDate] = '1998-03-26'


RequiredDate 列沒有索引。因此, SQL server 必須讀取 Orders 表的每一行。計算每行的 RequiredDate 的謂詞;如果謂詞為 true (即, 如果行符合資格), 則返回該行。


為了最大化性能, SQL server 盡可能在掃描迭代器中計算謂詞。但是, 如果謂詞太復雜或太貴(損耗性能), 則 SQL server 可能會在單獨的篩選器迭代程序中對其進行評估。謂詞以 WHERE 關鍵字或 XML 計劃中的標記出現在文本計劃中<Predicate></Predicate>。


以下是前面查詢的文本計劃:

|--Clustered Index Scan(OBJECT:([Orders].[PK_Orders]),

WHERE:([Orders].[RequiredDate]='1998-03-26'))


圖10-6 以掃描為例。

SQL Server內幕之分析計劃


由于掃描會觸及表中的每一行是否符合條件, 因此成本與表中的總行數成正比。因此, 如果表較小或許多行符合謂詞的條件, 則掃描是一種有效的策略。但是, 如果表很大, 并且大多數行不符合條件, 則掃描會觸及更多的頁面和行, 并執行更多不必要的 i/o


現在來看一個索引查找的示例。假設我們有一個類似的查詢, 但這次謂詞在 OrderDate 列上有一個索引:


SELECT [OrderId] FROM [Orders] WHERE [OrderDate] = '1998-02-26'


這一次, SQL server 可以使用索引直接定位到符合謂詞的行。在這種情況下, 謂詞稱為查找謂詞。在大多數情況下, SQL server 不需要顯式地評估查找謂詞,索引可確保查找操作只返回符合條件的行。


查找謂詞以SEEK關鍵字或 XML 計劃中的標記出現在文本計劃中<SeekPredicates></SeekPredicates>。

以下是本示例的文本計劃:


|--Index Seek(OBJECT:([Orders].[OrderDate]),

SEEK:([Orders].[OrderDate]=CONVERT_IMPLICIT(datetime,[@1],0)) ORDERED FORWARD)


SQL server 通過自動參數化查詢方法將參數 @1 替換為日期格式。


圖10-7 索引查找舉例。

SQL Server內幕之分析計劃


由于查找僅觸及符合資格的行和包含這些限定行的頁, 因此成本與限定行和頁的數量成正比, 而不是與表中的總行數成比例。因此, 在使用高度選擇性的查找謂詞時, 查找通常是一種更有效的策略, 即, 如果查找謂詞排除表的很大一部分。

SQL server 區分掃描和查找以及堆上的掃描 (沒有聚集索引的表)、對聚集索引的掃描以及對非聚集索引的掃描。

表10-2 所有有效組合在計劃輸出中的顯示。

SQL Server內幕之分析計劃


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余江县| 万盛区| 胶州市| 保德县| 孝义市| 唐山市| 黔西| 定日县| 鄄城县| 鹿泉市| 水城县| 徐汇区| 郑州市| 略阳县| 朔州市| 梁山县| 金堂县| 建水县| 格尔木市| 通化县| 兰溪市| 汤原县| 呈贡县| 昆明市| 临安市| 海安县| 广平县| 宣化县| 沙雅县| 楚雄市| 朝阳市| 宁河县| 甘洛县| 会昌县| 大庆市| 岑巩县| 蒙阴县| 临泽县| 松阳县| 广宁县| 津市市|