记录我工作学习生活中的点点滴滴......

Mysql索引使用过程中的一个小问题
发布于 Database
2014-05-08 13:28:36
4564
1

遇到一个很奇怪的mysql的问题

有一个表product其中id price name 上都有独立索引,如图1、图2


但是我运行EXPLAIN SELECT * FROM product ORDER BY name\G;的时候缺不使用索引,而是Using filesort,这让我百思不得其解。

稍微改下,执行EXPLAIN SELECT price FROM product ORDER BY price\G;确使用索引了。

后来咨询了我们DBA,得知了原因,这个和innodb数据存储结构有关,由于存储的时候使用了B+Tree,索引这列存储相应记录主键的值而不是地址,这样在用select *的时候如果得到了主键的值还要在去Primary Key查询对应的其他字段的内容,所以这样在数据量小的情况下不如走table scan+filesort有效率,这是mysql自动优化的结果。

有时候mysql的自动优化有点傻,我们会需要指定索引,这时可以使用use index或者force index两种。区别是use index是建议采用这个索引,比如上面的例子我们即使use index来建议,mysql也不会采用,这时候使用force index强制使用,这样就可以了。




分享本文到:
除非特殊注明,本文版权归原作者所有,欢迎转载!转载请注明版权以及本文地址,谢谢。
转载保留版权:Pakey's BLog >>Database >>Mysql索引使用过程中的一个小问题
本文地址:http://www.pakey.net/blog/mysql-innodb-index-question.html