如何在两个相似的索引内容上索引mysql表?

如何在两个相似的索引内容上索引mysql表?,mysql,indexing,Mysql,Indexing,我有一个mysql数据库表,包含以下列:a1、a2、a3、a4、b1、b2、b3和b4 我需要在记录上进行大量搜索,因此我想对表进行适当的索引。 有时,我需要搜索(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), 或者,对于我来说,有没有什么好方法可以只做一次索引,并且在这两种情况下都能很好地

我有一个mysql数据库表,包含以下列:a1、a2、a3、a4、b1、b2、b3和b4

我需要在记录上进行大量搜索,因此我想对表进行适当的索引。 有时,我需要搜索(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),

或者,对于我来说,有没有什么好方法可以只做一次索引,并且在这两种情况下都能很好地工作

答案在一定程度上取决于您的查询的真实外观。如果前四列(
a1
a2
a3
b1
)具有高度选择性,则两者都可以。索引应用于两个查询。当然,它将针对匹配所有列的查询进行更优化

但是,没有办法让“一个”索引同时处理两组列

如果这些列集是查询中使用的唯一列,那么索引“覆盖”了它们各自的查询。这意味着查询的所有信息都在索引中,不需要原始数据页。如果需要此类覆盖索引,但只需要一个,则可以将所有列添加到其中一个索引中:

a1, a2, a3, b1, b3, b4, b2
下一个需要考虑的问题是更新表的频率。维护两个索引需要两倍于维护一个索引的索引时间。这是查询的问题吗?如果是这样,您可能希望只使用一个索引