如果您可以根据您的经验帮助我回答有关这些问题的这些问题
1-如果我为5列创建了分离的索引
用户名,国家,created_at,评论,状态
并在where子句中使用了很多列username =''和国家=''和评论=''
sql会使用这3列的索引吗?因为每个人都拥有自己的索引。
2-如果我有多列索引"用户名,国家,created_at,评论,状态"
我用了两列,其中username =''和状态=''
我知道它会使用用户名,但它也会使用索引作为状态吗?
答案 0 :(得分:0)
MySQL几乎从不在单个查询中使用2个索引。 (也就是说,"索引合并"几乎从未被优化器选择。)
A'复合材料' (多列)索引(如果适用)优于两个单独的索引。
WHERE username = '...' and country = '...' and comment = '...'
通常会受益于
INDEX(username, country, comments) -- in any order
对于WHERE
,INDEX(username, country, created_at, comment, status)
将只使用前两列。 (除非是'覆盖'。)
WHERE username = '' and status = ''
将以开始 <{em> 它将部分从上面的5列复合索引中受益 - 第一列username
。只有在覆盖&#39;。
status
A&#34;覆盖&#34; index是包含所有 username
查询中任何位置的列的索引。在status
中按正确顺序排列正确的列比覆盖&#39;更重要。
这里有关于如何创建最佳索引的my discussion。