我有一个包含5列的表,比如说 - A(主键),B,C,D和E. 这个表有近150k行,这个表上没有索引。正如预期的那样,选择查询非常慢。
这些查询由用户搜索请求生成,因此他可以在任何字段(B,C,D和E)中输入值,这些是“IN”类查询。我不确定这里应该有什么好的索引策略 - 在每个列上都有索引或者将它们组合在一起。
每列的选择性是相同的(大约50)。 任何帮助将不胜感激。
答案 0 :(得分:3)
无论用户提供什么,您都在运行相同的查询吗?在这种情况下,该查询应告诉您要使用的索引。
例如,如果您的查询可能看起来像
SELECT * FROM mytable WHERE
B IN (...) AND
C IN (...) AND
D IN (...) AND
E IN (...)
在这种情况下,限制所有列的情况下,包含所有五列的组合索引可能没问题。
否则,每列创建一个索引,或将您始终限制的列组合在单独的索引中。
请记住,如果你有一个综合索引,例如B和C,那么不限制B的查询将不使用该组合索引。
答案 1 :(得分:0)
如果你可以在一个索引中对两列进行分组就可以了。只要您不像交叉连接那样查询笛卡尔积,就可以在每列上建立索引。但最好不要......