本文是关于创建索引的的内容:
(1) 索引的类型
(2)索引的优点
(3)优化索引的策略
这里给出一个索引的思维导图:
索引是存储引擎用于快速找到记录的一种数据结构。索引是对 查询性能优化 最有效的手段了,索引能够轻松将查询性能提升几个数量级。索引我们一般都是对某一列加索引。
存储引擎先在索引中找到对应值,然后根据匹配的索引记录上的rowid找到对应的数据行。比如运行如下查询语句:
SELECT first_name from actor where actor_id=5;
如果在actor_id列上建立有索引, MySQL将使用该索引找到actor_id 为5对应的行,也就是说,MySQL先在索引上按值查找,然后返回所有包含该值的数据行。
索引可以包含一个或则多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效的使用索引的最左前缀列。创建一个包含两个列的索引和创建两个包含包含一个列的索引是大不相同的。
1.索引数据结构的类型:
索引最常见的是B-Tree索引和哈希索引。要想理解一个索引,首先最重要的就是要理解索引的数据结构,这样才能更好的理解索引并最好利用索引。
(1)B-Tree树索引
一般情况下索引都是指B-Tree索引,它使用B-Tree数据结构来存储数据。实际上其实是基于B+Tree实现的,在每个叶子结点都包含一个指向下一个叶子结点的指针。
B-Tree意味着所有的值都是按照顺序存储的,比如对于name属性,就是按照从a-z的顺序存储的。使用B-Tree索引后,存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点开始进行搜索,最终结果是要么找到对应的值,要么记录不存在。这样就能够加快访问数据的速度。
B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据。(比如查找I-k开头的名字,这样效率会很高)
B-Tree索引适合的查询类型
(1) 全值匹配:和索引中的所有列进行匹配。
(2)匹配最左前缀:对于一个索引包含多个列,只使用索引的第一列。
(3)匹配列