我有關於SQL Server索引的問題,這些索引一直在困擾着我。在非聚集索引中,第二,第三,第四...列是如何排序的?
想象一下,一個表是這樣的:
CREATE TABLE TelephoneBook (
FirstName nvarchar(50),
LastName nvarchar(50),
PhoneNumber nvarchar(50)
)
有這樣一個指標:
CREATE NONCLUSTERED INDEX IX_LastName ON TelephoneBook (
LastName,
FirstName,
PhoneNumber
)
和想象,這個表有幾十萬行的。
比方說,我想選擇姓氏以B開頭,名字是'John'的人。我會寫下面的查詢:
SELECT
*
FROM TelephoneBook
WHERE LastName like 'B%'
AND FirstName='John'
由於索引可以幫助減少我們需要掃描,因爲這組所有反正用B開始LastNames的行數,它也爲做到這一點名字?或者數據庫掃描以B開頭的每一行以找到名爲'John'的那一行?
換句話說,第二,第三,第四,...列是如何在索引中排序的?在這種情況下它們是否也是字母順序的,所以很容易找到約翰娜?或者他們是以某種隨機或不同的順序?
編輯:爲什麼我問,是因爲我剛纔讀到,在上面的SELECT語句中,索引只會用於縮小搜索範圍,以姓氏以B開始的記錄,但索引將會不能用於找到Johanna所有的行(並且會掃描所有'B'行)。我想知道這是爲什麼?我沒有得到什麼?
對小表進行全表掃描的成本要低於在同一個表上對非聚集索引的查找。我已經看到人們強制索引使用25個行表,因爲全表掃描是不好的。很酷的答案 – Namphibian