2011-09-07 96 views
1

我有一个包含5列的表,例如 - A(主键),B,C,D和E. 此表有近150k行,此表中没有索引。正如预期的那样,select查询非常慢。MySQL DB的最佳索引策略

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

这些柱子各自的选择性是相同的(约50)。 任何帮助,将不胜感激。

回答

0

如果你可以在一个索引中分组两列,那就行了。只要不查询交叉连接等笛卡尔产品,在每一列上都有索引就没有那么糟糕了。但最好不要太..

3

你是否运行相同的查询,无论用户给你什么?在那种情况下,该查询应该告诉你要使用哪些索引。

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

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

在这种情况下,如果你对所有列限制,所有5列的组合索引可能会是好的。

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

请记住,如果您的组合索引位于例如B和C,那么不限制B的查询将不会使用该组合索引。