我第一次使用數據庫中的索引,到目前爲止我已經瞭解到,如果您有索引('col1','col2','col3')等多列索引, ,如果你做了一個使用col2 ='col2'和col3 ='col3'的查詢,那麼該索引就不會被使用。db2 10.5多列索引解釋
我還了解到,如果一列色譜柱的選擇性非常低。索引是無用的。 但是,從我的測試來看,上述情況似乎都不是真的。有人能解釋更多嗎?
我有一個超過1600萬條記錄的表格。假設claimID是主鍵,那麼有一個historynumber列只有3個不同的值(1,2,3),而storeNumber的最後一列有大約100萬個不同的值。
我有一個唯一的claimID索引,另一個索引(historynumber,claimID)和索引(historynumber,storeNumber)和最後索引(storeNumber,historynumber)的其他索引。
我的猜測是,如果我做的:
select * from my_table where claimId='123456' and historynumber = 1
會比
select * from my_table where historynumber = 1 and claimId = '123456'
但是快得多,2具有完全相同的性能(即時)。所以我認爲主鍵索引可以在任何列順序上工作。因此,我嘗試了相同的事情,只是在historynumber和storeNumber上進行。結果完全一樣。然後我開始嘗試沒有索引的列,當然結果也是一樣的。
最後,我做了
select * from my_table where historynumber = 1
和查詢需要很長時間,我不得不取消它。
所以我的結論是where子句中的列順序是完全無用的,索引定義中的列順序也是如此,因爲看起來數據庫足夠聰明,可以告訴哪個列是最高選擇性列。
有人能給我一個可以證明的例子嗎?
嘿,感謝回答。第二個查詢不是問題。我只是確保historynumber = 1的查詢需要很長時間而不是立即執行,否則我的其他測試會失敗。我今天做了很多研究,所有人都表示這個訂單會有所作爲。我無法找到我今天閱讀的所有鏈接,但這裏有一些情況如此: [link1](http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column - 指數) [鏈接2](http://stackoverflow.com/questions/5542895/sql-indexes-and-performance-improvement) – user3758745
那麼缺少什麼?否則,我的答案恰恰恰到好處? – MichaelTiefenbacher
這些鏈接正在討論MS SQL Server。索引的使用通常是DBMS特有的。在DB2上,'WHERE'中的順序並不重要...並且在DB2上我至少建議最有選擇性的列首先在索引中。同樣在DB2 for i上,'historynumber = 1'查詢可能使用全表掃描,因爲查詢引擎可能會確定超過30%的行將被返回。 – Charles