我一直在試圖找到以下問題的簡明答案,我讀了很多,但我仍然不確定。也許沒有簡單的答案,因爲情景可能如此不同。mysql索引性能
但這裏的問題:
1)如果我索引TINYINT列所有記錄0或者1?
實例查詢其中postActive列具有每個記錄爲0或1:
SELECT postId, postName, postTitle
FROM postTable
WHERE postDate > Now()
AND postActive = 1
2)我應該索引int列,其中所有記錄具有0不同之處在於具有一個備用int值記錄即表中獨一無二的?
對於此示例,列orderProcessingId將在表中爲100%唯一(零除外),絕大多數記錄對於orderProcessingId爲0。
SELECT orderId, orderInformation, orderData, orderStuff
FROM orderTable
WHERE orderProcessingId = 38457237
在這兩個表中都有數十萬條記錄。
我想我是問題的原因是因爲它似乎索引將取決於相對分佈的頻率值來提高性能。但實施例1中僅存在兩個(且僅有兩個)值的非常高的頻率,和實施例2中有一個值(0),並且沒有重複頻率的例外的極高的頻率。
但我的想法都基於猜想......所以。你能告訴我什麼?
感謝CBroe 。在第一個例子中,大多數記錄是1.但是,有700k 1和400k 0之類的。我總是隻對看1的感興趣。 例如2,你是說我應該允許Null並使用獨特的索引來獲得更好的性能? (現在我正在使用0和普通索引) – userlite
在700k 1和400k 0的情況下,在某些情況下,它甚至可能會隨着索引變慢。如果您有1%1和99%0,MySQL大多數時間都會做正確的事情(只有在選擇1時才使用索引)。 – Vatev
嗯,在這個問題的幾乎每個答案中都有一個_「它取決於」。當然,提問者必須嘗試一下,測量並使用'EXPLAIN'來找出真正發生的效應。 – CBroe