2

我一直在努力寻找以下问题的简明答案,并且我已经阅读了很多,但我仍然不确定。也许没有简单的答案,因为场景可能如此不同。

但这里有几个问题:

1) 我应该索引一个所有记录都是 0 或 1 的 tinyint 列吗?

示例查询,其中 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) 的频率非常高,并且没有例外的重复频率。

但我的想法几乎都是基于猜想......所以。你能告诉我什么?

4

1 回答 1

3

我想我质疑的原因是因为索引似乎依赖于相对分布的值频率来提高性能。

不必要。

我应该索引一个所有记录都是 0 或 1 的 tinyint 列吗?

取决于 - 取决于这些值的分布是否基本相等,如果不是,您是否最感兴趣的是显着减少的值。

我是否应该索引一个所有记录都为 0 的 int 列,除了具有在表中唯一的备用 int 值的记录?

由于您正在尝试寻找其中一种稀有且独特的价值——是的。

(我希望你不会混淆0NULL顺便说一句。因为如果你的整数类型条目是唯一的,除了那些具有 value 的条目0,你不能在这里使用 UNIQUE 索引。)

于 2013-03-29T15:24:28.473 回答