2014-02-26 61 views
1

我有一个mysql数据库表,包含以下列:a1,a2,a3,a4,b1,b2,b3 b4。如何在两个类似索引内容上索引mysql表?

我需要对记录进行大量搜索,因此我想正确地为表格编制索引。有时,我需要搜索(a1,a2,a3,b1,b2),有时需要搜索(a1,a2,a3,b1,b3,b4)。

我该怎么办两个指标一样

INDEX search1 (a1,a2,a3,b1,b2), 
INDEX search2 (a1,a2,a3,b1,b3,b4), 

或者说,有没有什么好的办法为我做的指标只是一次,它可以在两种情况下会奏效吗?

回答

0

答案取决于你的查询真正的样子。如果前四列(a1,a2,a3,b1)具有高度选择性,那么任何一个都可以。该索引应该用于两个查询。当然,它会针对与所有列匹配的查询进行更优化。

尽管如此,没有办法处理两组列的“一个”索引。

如果这些列集合是查询中唯一使用的列,那么索引将“覆盖”它们各自的查询。这意味着查询的所有信息都在索引中,并且不需要原始数据页面。如果你想这样的覆盖索引,而是只想要一个,那么你可以将所有列添加到索引中的一个:

a1, a2, a3, b1, b3, b4, b2 

接下来要考虑的是如何经常对表进行更新。维护两个索引需要两倍的索引时间来维护一个索引。这是查询的问题吗?如果是这样,你可能想要只倾向于一个索引。