我使用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作为条件。
我想索引该表。哪个列必须编入索引?什么类型的索引(主要,唯一,全文)?
答案 0 :(得分:1)
A列已经是PRIMARY KEY,所以不再需要索引。您当然可以使用普通的KEY或INDEX索引DATE列。
对于Col.B,我建议您使用规范化表单并将文本值存储在不同的表中,并使用此表中该表的INT id引用它们。它绝对可以节省存储空间和搜索数据库所需的时间。标准化表的一个很好的例子可以在Wikipedia找到。
至于最后一栏,由于你没有过滤结果,我认为你不需要那里的索引。
在应用1NF表格后,一个简单的INDEX方法将起作用。
答案 1 :(得分:0)
您将很难将此查询编入索引。 ColB
只有五个值,这是一个非常高的选择性。不幸的是,索引在这样的列上并不是很有用。
你应该在(ColB, ColC)
上加上一个复合索引。这适用于ColB
与=
或in
子句一起使用且ColC
上有任何条件的查询(<>
除外)。但是,如果一个典型的查询要处理表中的许多行,比如说5%或类似的行,那么索引可能根本没用。