我一直在试图找到以下问题的简明答案,我读了很多,但我仍然不确定。也许没有简单的答案,因为情景可能如此不同。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