如何在SQL Server中訪問數據

大體上,SQL Server 檢索請求數據的方式只有兩種:使用表掃描   使用索引

SQL Server將使用哪一種方法執行特定的查詢呢,這取決於有什麼樣的索引可用,詢問的是什麼列。在進行什麼類型的聯結以及表的大小。

1使用表掃描:

表掃描是非常直觀的過程。在執行表掃描時,SQL Server 從表的物理起點開始,瀏覽表中的每一行,當發現符合查詢條件的行時,把這些行包含在結果集中。你可能聽到過很多關於表掃描不好的事情,例如千萬級別的數據時容易超時或死機。一般來說,這是真的。不過,在某些實例中,表掃描實際上可能是最快的訪問方法,典型的情況是,當從相當小的表中檢索數據時就是如此。在表的大小具體爲多少時表掃描會成爲最快的訪問方法,這將隨標的寬度和查詢時特定性質的變化而變化。

注意:看看你是否可以說明,爲什麼在適當的時候在查詢的WHERE子句中使用EXISTS可以極大的提升性能,使用EXISTS運算符時,SQL Server只要一找到匹配查詢條件很快就會主動停止查找。如果有一個一百萬條記錄的表,表中第三個記錄就是匹配的記錄,那麼,使用EXISTS選項會省去讀取999 997條記錄的工作量!NOT EXISTS也可以同樣的方式其作用。

2使用索引:

當SQL Server決定使用索引時,實際上,其處理過程與表掃描多少有些相似,只是這樣有些捷徑。在查詢優化過程中,優化器查看所有的可用的索引,然後選擇最佳的一個(這主要基於在聯結和WHERE子句中指定的信息,結合SQL Server保存的關於索引組成的統計信息)。一旦選定了索引,SQL Server在索引的樹結構中導航,到達匹配查詢條件的數據,再提取需要的記錄。區別之處在於,由於數據是排序的,因此查詢引擎知道何時到達當前尋找範圍的終點。於是,它可以結束查詢,或者在需要時繼續移動到下一級的數據範圍。思考一下到今天爲止學過的查詢主題,你可能會注意到,索引與EXISTS選項在作用方式上有驚人的相似之處。EXISTS關鍵字允許在找到匹配值後立即退出查詢運行。索引利用類似的方式搜索數據的過程,因此使用索引能同樣在這裏停止。不過使用索引能同樣或者甚至更好的改進性能。服務器可以瞭解什麼時候不再存在任何相關的數據,並能在這裏停止。不過使用索引甚至能更好,因爲無需侷限於布爾邏輯的情形中。可以在範圍的開始和結束處應用同樣的概念。可以非常快速查找數據而不是在整個表中搜索數據。

注意:不要從我對於索引與EXISTS運算符能爲你做什麼的比較中得出這樣的印象:索引會完全取代EXISTS運算符,兩者並不是互相排斥,他們可以一起使用,並且常常這樣使用。這裏把他們放在一起講述只是因爲他們可以瞭解何時完成自己的工作並能在抵達標的物理末尾之前退出,在這一點上她們具有相似之處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章