mysql 索引使用疑惑

普通索引

今天做了一个索引使用的测试,在一个6千万表中建立三个普通索引,测试索引是否都能用到。
表名:z_invite_friend 普通索引:bbsid、boardid、bookid
clipboard.png
首先只查where bbsid的情况,用explain看下使用索引的情况
EXPLAIN SELECT id FROM z_invite_friend WHERE bbsid = 1;
clipboard.png
毫无疑问用到了bbsid索引。
然后查询where bbsid and boardid 的查询情况
EXPLAIN SELECT id FROM z_invite_friend WHERE bbsid = 1 and boardid = 2;
clipboard.png
只用到了boardid索引
最后查询where bbsid and boardid and bookid
EXPLAIN SELECT id FROM z_invite_friend WHERE bbsid = 1 and boardid = 2 and bookid = 3;

clipboard.png
用到了bookid、boardid索引
这是什么情况呢?大神帮忙分析下

阅读 3k
4 个回答

1.mysql优化器会进行成本估算,会选择它认为开销小的索引进行查询;
2.Using intersect(bookid, boardid)是进行了索引合并优化Index Merge Optimization

mysql会根据查询的量的不同选择合适的索引。

如果三个条件只用以个索引,需要建一个这三个字段的联合索引

bookid+boardid两个索引就只有1行数据了,不需要第三个索引来参与查询了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题