mysql优化(二)

作者:有用网

一、B-Tree索引和hash索引

B-Tree索引是mysql数据库中使用最多的索引类型,除了Archive存储引擎,其他所有存储引擎都支持btree,不仅仅是在mysql中,其他很多的数据库都是以B-Tree索引作为主要的索引类型,主要因为B-tree在数据库的检索,排序,分组中,都有着优异的表现。

B-Tree索引的理论查询次数是n/2

Hash索引因其特殊的索引结构,使其检索效率非常高,可以一次到位,不像B-Tree索引必须经过多次的查找,从根节点开始一直到找到数据,IO效率远低于Hash。

但是也因其特殊性导致很多问题,比如

1.磁盘会产生很多空洞

2.无法对范围查询优化

3.无法利用前缀索引

4.必须回行,通过索引拿到数据位置,必须回到表中取数据

5.Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高


B-Tree常见误区和B-Tree索引的左前缀原则

我们创建一个index(a,b,c)的联合索引

当我们的条件为

where a = 1       能,只是用了a列

where a = 1 and b = 2    能,使用了a,b列

where a = 1 and b = 2 and c = 3 能 使用了a,b,c列

where b = 2   或者   where c = 3  否

where a = 1 and c = 3 a列能发货索引,而c不能

where a = 1 and b>2 and c=3    a能,b能,c不能

where a = 1 and b like“xxx” and c=3    a能 ,b能,c不能


聚簇索引和非聚簇索引

myisam是非聚簇索引 , myisam索引指向行在磁盘上的位置,主(次)索引,都指向物理行(磁盘位置)

innodb是聚簇索引,innodb的主索引文件上,直接存放了该行的数据,次级索引指向对主键的引用

注意:innodb来说

1.主键索引,既存储索引值,又在叶子中存储行的数据

2.如果没有主键,则会unique key 做主键

3.如果没有unique,则系统生产一个内部的rowid做主键


聚簇索引的优势与劣势:

优势:根据主键查询条目比较少时,不用回行(数据就在主键节点下)

劣势:如果碰到不规则的数据插入时,造成频繁的页分裂


关键字
Mysql

阅读 1349 发布于 2021-03-18