mysql中的索引表

时间:2013-05-26 01:34:54

标签: mysql

我使用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作为条件。

我想索引该表。哪个列必须编入索引?什么类型的索引(主要,唯一,全文)?

2 个答案:

答案 0 :(得分:1)

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

对于Col.B,我建议您使用规范化表单并将文本值存储在不同的表中,并使用此表中该表的INT id引用它们。它绝对可以节省存储空间和搜索数据库所需的时间。标准化表的一个很好的例子可以在Wikipedia找到。

至于最后一栏,由于你没有过滤结果,我认为你不需要那里的索引。

在应用1NF表格后,一个简单的INDEX方法将起作用。

答案 1 :(得分:0)

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

你应该在(ColB, ColC)上加上一个复合索引。这适用于ColB=in子句一起使用且ColC上有任何条件的查询(<>除外)。但是,如果一个典型的查询要处理表中的许多行,比如说5%或类似的行,那么索引可能根本没用。