普通索引
今天做了一个索引使用的测试,在一个6千万表中建立三个普通索引,测试索引是否都能用到。
表名:z_invite_friend 普通索引:bbsid、boardid、bookid
首先只查where bbsid的情况,用explain看下使用索引的情况
EXPLAIN SELECT id FROM z_invite_friend
WHERE bbsid = 1;
毫无疑问用到了bbsid索引。
然后查询where bbsid and boardid 的查询情况
EXPLAIN SELECT id FROM z_invite_friend
WHERE bbsid = 1 and boardid = 2;
只用到了boardid索引
最后查询where bbsid and boardid and bookid
EXPLAIN SELECT id FROM z_invite_friend
WHERE bbsid = 1 and boardid = 2 and bookid = 3;
用到了bookid、boardid索引
这是什么情况呢?大神帮忙分析下
1.mysql优化器会进行成本估算,会选择它认为开销小的索引进行查询;
2.Using intersect(bookid, boardid)是进行了索引合并优化Index Merge Optimization