我想知道在以下情況下定義兩種索引類型的危害是什麼。組合多列索引以及多個單列索引
表Tasks
:
TaskID (Primary, Auto Number)
OwnerID (Single Column Index)
AssignedToID (Single Column Index)
DateUpdated (Single Column Index)
TaskStatus (Single Column Index)
Mutli Column Index (AssignedToID, DateUpdated)
有以下主要查詢...查詢DateUpdated
是可選的。
- 管理員可以篩選日期任務
單列索引DateUpdated訪問
WHERE DateUpdated <= startDate AND DateUpdated <= endDate ORDER BY DateUpdated DESC
單列索引DateUpdated訪問
WHERE TaskStatus = 'Active' ORDER BY DateUpdated DESC
用戶只能篩選分配的任務給他們
多列索引訪問
WHERE DateUpdated <= startDate AND DateUpdated <= endDate AND AssignedToID = userID ORDER BY DateUpdated DESC
多列索引訪問
WHERE AssignedToID = userID AND TaskStatus = 'Active' ORDER BY DateUpdated DESC
DateUpdated
在單列索引
TaskID
被訪問的任何標準沒有提及WHERE AssignedToID = userID AND TaskStatus = 'Active' ORDER BY TaskID DESC
看起來我可以通過在某些頻繁查詢中定義多列索引來提高性能,我有以下問題。
- 定義組合指數和多指數都有什麼壞處嗎?
- 如果查詢包含每列的謂詞而不管查詢中列的順序,SQL是否會優先於單索引合併的組合索引?
- 如果您有任何示例說明兩個索引可能有害,我想知道爲什麼以及如何,因此我可以相應地設計我的索引。
我的數據庫操作有95%的讀取和5%的寫入,所以我不太擔心索引寫入性能問題,但是我的讀取性能是最重要的。