0

我使用了 MySQL,这是我的表

|Col A(Primary)| Col B  | Col C      | Col D |
|1             | SOCCER | 2012-12-01 | P |
|2             | VOLLEY | 2012-12-14 | P |
|3             | SOCCER | 2012-12-01 | L |
|4             | VOLLEY | 2012-12-10 | P |
|3             | SOCCER | 2012-12-13 | L |

该表包含百万行。我经常在查询中使用 Col B 和 Col C 作为条件。

我想索引该表。必须索引的列是什么?什么类型的索引(主索引、唯一索引、全文索引)?

4

2 回答 2

1

列 A 已经是 PRIMARY KEY,因此不再需要索引。您当然可以使用普通的 KEY 或 INDEX 索引 DATE 列。

至于 Col. B,我建议您使用规范化形式并将文本值存储在不同的表中,并在此表中引用那些使用该表中的 INT id 的值。它肯定会节省搜索数据库所需的存储空间和时间。可以在Wikipedia上找到规范化表的一个很好的示例。

至于最后一列,由于您不为此过滤结果,我认为您不需要在那里建立索引。

应用 1NF 形式后,一个简单的 INDEX 方法将起作用。

于 2013-05-26T02:21:44.787 回答
0

您将很难索引此查询。 ColB只有五个值,这是一个非常高的选择性。不幸的是,索引在这样的列上不是很有用。

您应该在(ColB, ColC). 这将适用于ColB=orin子句一起使用并且您有任何条件的查询ColC(也许 for 除外<>)。但是,如果一个典型的查询要处理表中的许多行,比如 5% 或类似的行,那么索引可能根本没有帮助。

于 2013-05-26T02:27:01.787 回答