特别指出,本文针对mysql 5.7+ 以上版本说明的,在一下的版本可能会有出入,不过应该不大。
注:本文两种类型的索引介绍来着mysql官方文档(https://dev.mysql.com/doc/refman/5.7/en/index-btree-hash.html)的翻译,有的地方意思只是一个大概,水平有限,有大神看到,如有空,有翻译了请发一份到1072247966@qq.com
理解Hash和B-Tree的数据结构类型能够让我们针对不同的查询在不同的存储引擎下选择合适的索引,特别是内存的存储引擎,允许你选择hash还是B-Tree。
B-Tree索引特点
B-Tree类型的索引可以在一个查询当中使用=,>,>=,>=,或者between,当然也支持like操作符,但是like后的字符串不能以通配符%开头。例如,下面的例子会命中索引:
select * from table_name where col_name like 'xxx%';
select * from table_name where col_name like 'xxx%XX';
而下面的例子不会命中索引:
select * from table_name where col_name like '%XX';
select * from table_name where col_name likeother_col;
说得比较简洁,但是上面的这些东西必须满足最左匹配原则,比如你建立了abc索引,在使用的时候必须先把a伺候了。