Mysql索引
什么是索引?
索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。
Mysql中有哪几种索引?
有Hash索引和B+ Tree索引,InnoDB引擎默认的是B+树。
Hash索引和B+ Tree索引有什么优缺点?
Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,适合等值查询,无法进行范围查询,无法利用索引完成排序,不支持多列联合索引的最左匹配,在大量重复键值对的情况下因为哈希碰撞导致效率低下;
B+ Tree是一种多路平衡查找树,节点天然有序(左子<父<右子), 对于范围查询的时候不需要做全表扫描。
B+ Tree的叶子节是如何储存数据的?
Mysql的表一定会有一个聚簇索引,叶子节点储存整行数据,除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes),叶子节点存储索引列及主键。
InnoDB对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。
各种索引查询数据的优缺点?
主键索引只需查询一次,二级索引如果不是覆盖索引会查询两次。
什么是覆盖索引?
如果一个索引包含所有需要查询的字段的值,则这个索引就为覆盖索引。
如何创建索引?
减少IO操作,特别是随机IO操作是数据库优化的主要方式。
使用联合索引,增加覆盖索引查询的几率,减少回表,可以提高性能。
创建一个联合索引,实际上相当于创建了多个索引,减少索引占用空间。索引命中时遵循最左匹配原则,应将使用频繁的列放到左边。
索引执行分析?
通过explain查看sql语句的执行计划。1、根据搜索条件,找出所有可能使用的索引 2、计算全表扫描的代价 3、计算使用不同索引执行查询的代价 4、对比各种执行方案的代价,找出成本最低的那一个。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
作者: | ljtletters |
博客地址: | http://www.cnblogs.com/ljtletters |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!再次感谢您耐心的读完本篇文章。 |