sqlserver執行優化

理論儲備

  1. 聚集索引,數據是按順序存儲的,使用聚集索引查找到的數據就是數據物理存儲的位置,聚集索引的葉子節點不僅包含了索引鍵,還包含了數據頁。
  2. 非聚集索引,索引是完全獨立於數據的,是在另外的索引頁面中存放非聚集索引數據的,使用非聚集索引查找數據,除非這個非聚集索引已經包含了T-SQL查詢需要返回的所有字段,不然索引就需要根據非聚集索引中葉子節點的書籤Bookmarks定位到實際的數據頁,才能返回所需要的字段值。
  3. 非聚集索引的物理結構,其葉子節點通常會保留數據行的唯一標識。唯一標識在聚集表中通常爲主鍵值。下圖就是非聚集索引的書籤查找圖。
    在這裏插入圖片描述

sqlserver的圖形執行計劃的閱讀方式是從右到左,從上到下
sqlserver的優化器是基於開銷來進行優化的,但是要開銷如何得到呢?最主要的是統計信息得到。這樣在預估選擇什麼算法關聯時,要先知道處理的數據集大小,數據分佈情況,索引是否存在等P73.

  1. 掃描 p247
  • 聚集索引掃描
    雖然有時聚集索引掃描和表掃描無異,但有時也會範圍掃描。
  • 非聚集索引掃描
    這個比較簡單,如果select表上的非聚集索引索引列,就可以看到
  • 表掃描
    出現表掃描,就證明這個表上沒有聚集索引,有時優化器必須遍歷全表來找到數據會用到。
  1. 查找
  • 聚集索引查找
  • 非聚集索引查找
  • 書籤查找

查找和掃描完全不同,掃描是要遍歷整個B樹,而查找可以通過B樹的鍵值查找,直接提取數據,並返回結果。

誤區

  1. 不管複合索引(多列組成一個索引)中的列的順序怎樣,查找行爲都是一樣。這是錯誤的。複合索引中最左邊的一列有統計信息,其它列sqlserver不計算統計信息。這說明索引的列是有順序的,而且非常主要P131.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章