MySQL 创建索引,mysql目录树_MySQL B+树目录及索引优化_mysql

 2023-09-23 阅读 21 评论 0

摘要:MySQL的索引实现由很多种实现,包括hash索引,B+索引,全文索引等,本文只讨论B+树索引。为什么使用B+树索引?1.评价一个索引好坏主要看IO的访问次数,B+树红黑树来说,树高很小(出度很大)即可以有效降低IO的访问

MySQL的索引实现由很多种实现,包括hash索引,B+索引,全文索引等,本文只讨论B+树索引。

为什么使用B+树索引?

1.评价一个索引好坏主要看IO的访问次数,B+树红黑树来说,树高很小(出度很大)即可以有效降低IO的访问次数。B+数的高度h=logd(n),d越大,h越小,查询效率越高。相对B树,B+树d可以很大,因为非叶子节点不存储数据,只存储key,在一个存储页上可以存储更多的key值。在每个页上可以存储更多的key,即d很大。

2.外存按照页进行逻辑划分,页大小固定,当读入外存数据时,会根据局部性原理每次会预读连续的多页数据到内存。B+树的叶子节点是存储是连续和有序的,在查询时,尤其在范围查询时较少的IO次数可以访问到所需的数据。

MySQL 创建索引?InnonDB引擎B+树索引是怎么实现的?

1.InnoDB使用聚集索引,数据根据主索引存储在叶子节点上,辅助索引的data域存储主键,索引innodb必须具有主键,并且主键是最好是单调递增的,主键的长度不要过长,负责会浪费空间。myisam使用非聚集索引,即主索引(B+树)的叶子节点存储数据的地址,索引myisam可以没有主键,数据也不是存储在B+主索引的叶子节点上的。

怎样选择索引怎样优化索引?

1.索引遵循最左性原理,例如联合索引是有序的(a,b,c),在查询时查询条件是a,ab,abc的精确匹配,都会使用索引,但是如下情况不能使用索引。

1.1 如果不是连续的例如ac,不会使用索引,不过b可以使用in的方式构造索引条件,当然也可以增加ac辅助索引;

Mysql排序、1.2 b,c单独精确查询都不会用到索引;

1.3 使用like语句,通配符不在开头可以使用索引;

1.4 范围列查询只能使用第一个列索引,但是有时between and 等多值匹配可以使用索引;

1.5 使用函数或者表达式对列查询,不会使用索引;

2.索引选择性

如果一个索引节点为128B。数据表大于2000建立索引;选择性低即区分度不大的列不适合索引;可以截取前缀作为索引,减少索引长度;一定使用一个自增的字段作为索引。

性能优化常用工具有哪些?

1.使用explain 和show profiles;可以查看索引使用情况和执行效率。explain使用方法和数据含义查看下列文章。

http://database.51cto.com/art/200912/168453.htm

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/88402.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息