MySQL DB的最佳索引策略

时间:2011-09-07 08:08:44

标签: mysql indexing

我有一个包含5列的表,比如说 - A(主键),B,C,D和E. 这个表有近150k行,这个表上没有索引。正如预期的那样,选择查询非常慢。

这些查询由用户搜索请求生成,因此他可以在任何字段(B,C,D和E)中输入值,这些是“IN”类查询。我不确定这里应该有什么好的索引策略 - 在每个列上都有索引或者将它们组合在一起。

每列的选择性是相同的(大约50)。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

无论用户提供什么,您都在运行相同的查询吗?在这种情况下,该查询应告诉您要使用的索引。

例如,如果您的查询可能看起来像

SELECT * FROM mytable WHERE
  B IN (...) AND
  C IN (...) AND
  D IN (...) AND
  E IN (...)

在这种情况下,限制所有列的情况下,包含所有五列的组合索引可能没问题。

否则,每列创建一个索引,或将您始终限制的列组合在单独的索引中。

请记住,如果你有一个综合索引,例如B和C,那么不限制B的查询将不使用该组合索引。

答案 1 :(得分:0)

如果你可以在一个索引中对两列进行分组就可以了。只要您不像交叉连接那样查询笛卡尔积,就可以在每列上建立索引。但最好不要......

相关问题