索引是帮助Mysql高效获取数据的排好序的数据结构
索引数据结构包括:二叉树,红黑树(平衡二叉树),Hash表(不支持范围查找),B-Tree,B+Tree
Mysql的索引所采取的索引的数据方式是B+Tree
B+Tree特点
1.非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
2.叶子节点包含所有索引字段
3.叶子节点用指针连接,提高区间访问性能
-------------------------
联合索引使用技巧
create index LianHeIndex on stu(name,age);
执行上面的语句后在表stu中就创建好了一个名叫LianHeIndex联合索引,在使用联合索引的时候,我们遵守一个最左原则,即INDEX LianHeIndex (name,age)支持name|name age组合查询,而不支持age查询;换句话说,在执行
select * from stu where name=?
1
或者
select * from stu where name=? and age=?
1
时联合索引才会有效,如果执行
select * from stu where age=?
1
则联合索引不会生效。
如果我们是在name和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age)的复合索引,那么其实相当于创建了(name)、(name,age)两个索引,这被称为最佳左前缀特性。
因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
注意事项
只要列中包含有NULL值都将不会被包含在索引中
复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的,所以我们在数据库设计时尽可能不要让字段的默认值为NULL。