关于几列的分离索引的Mysql问题

时间:2018-05-09 13:33:55

标签: mysql sql database indexing

如果您可以根据您的经验帮助我回答有关这些问题的这些问题

1-如果我为5列创建了分离的索引

用户名,国家,created_at,评论,状态

并在where子句中使用了很多列username =''和国家=''和评论=''

sql会使用这3列的索引吗?因为每个人都拥有自己的索引。

2-如果我有多列索引"用户名,国家,created_at,评论,状态"

我用了两列,其中username =''和状态=''

我知道它会使用用户名,但它也会使用索引作为状态吗?

1 个答案:

答案 0 :(得分:0)

MySQL几乎从不在单个查询中使用2个索引。 (也就是说,"索引合并"几乎从未被优化器选择。)

A'复合材料' (多列)索引(如果适用)优于两个单独的索引。

WHERE username = '...' and country = '...' and comment = '...'

通常会受益于

INDEX(username, country, comments) -- in any order

对于WHEREINDEX(username, country, created_at, comment, status)将只使用前两列。 (除非是'覆盖'。)

WHERE username = '' and status = ''

开始 <{em> 它将部分从上面的5列复合索引中受益 - 第一列username。只有在覆盖&#39;。

时才会使用status

A&#34;覆盖&#34; index是包含所有 username查询中任何位置的列的索引。在status中按正确顺序排列正确的列比覆盖&#39;更重要。

这里有关于如何创建最佳索引的my discussion