高性能索引策略 您所在的位置:网站首页 sqlserver全文索引缺点 高性能索引策略

高性能索引策略

2023-07-01 15:10| 来源: 网络整理| 查看: 265

1.前缀索引和索引的选择性

前缀索引的意义就是使用数据的前几位字符组合成索引,比如有100条数据,每条数据的长度是5个字符,这里面98条数据的前两个字符是不一样的,但是剩余2条数据的前两个字符是一样的,那这样索引可以建立99个。

这里有个属性为索引的选择性:不同的索引值/总记录数=索引的选择性。因此这里的选择性是99/100=0.99

前缀索引的建立:length参数就是索引的长度。

CREATE INDEX index_name ON table_name (column_name(length)); 2.多列索引

多列索引(复合索引 /多列索引 /联合索引 /组合索引)就是在数据库表中多个字段上建立联合索引,此类索引对索引列的顺序有要求。

比如建立了 学校 ,班级,学生的一个多列索引。

那么只有搜索1:学校,班级,学生。2:学校,班级。3:学校。4:班级,学校,学生时才会使用到多列索引。4和1是一样的,查询优化器会把4的顺序优化为1。搜索班级,学生是无法使用多列索引。这里参考最左匹配原则。

3.选择合适的索引列顺序

如何选择合适的索引列顺序:

1.将选择性最高的列放在索引最前列。

2.避免大量的随机io,考虑索引列对排序的影响,已经子查询的影响。

3.从pt-query-digest工具中获取最差查询

4.聚簇索引

聚簇索引的意义是将索引与数据存放在同一个结构体中。代表的是一种结构体,数据行只能有一个存放实体,因此一张表只有一个聚簇索引(覆盖所有可以茉莉多个聚簇索引的情况)

聚簇索引是数据库引擎层的概念,因此只有支持聚簇索引的数据库引擎拥有此结构,这里一般讨论Innodb。Innodb根据主键建立聚簇索引,因此Innodb中聚簇索引的索引列就是主键列。没有主键的表使用Innodb隐式定义的主键。

聚簇索引的优点:

1.可以将相互关联的数据放一起,减少磁盘IO

2.由于索引列与数据放在同一个B+数中,数据访问快。

3.使用覆盖索引的扫描查询,可以直接使用叶节点的主键值。

聚簇索引的缺点:

1.如果数据都放在内存中,聚簇索引优势不大。

2.插入速度严重依赖与插入顺序。按主键顺序插入行是将数据加载到Innodb表最快的方式,如果不是按着主键顺序插入行,最好使用OPTIMIZE TABLE命令重新组织表。

3.更新聚簇索引代价高,会强制被更新的行移动到新位置。

4.插入新行,主键被更新导致需要移动行时,可能面临页分页问题(page split)

页分裂:当主键被插入到一个已满的页中时,存储引擎会将该页分裂成两个页面来容纳该行。页分裂会导致表占用更多磁盘空间。

5.可能导致全表扫描变慢,尤其是行比较稀疏,页分裂导致存储不连续时。

6.非聚簇索引有可能更大。

7.非聚簇索引需要两次索引查找。二级索引的叶子节点保存的是引用行的主键值。而不是引用行的物理位置指针。(自适应哈希可以减少这个操作)

5.覆盖索引 6.使用索引扫描来做排序 7.冗余和重复索引 8.未使用的索引 9.维护索引和表 10.找到并修复损坏的表 11.更新索引统计信息 12.减少索引和数据的碎片



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有