`

提高MySQL索引策略三:簇索引

    博客分类:
  • db
 
阅读更多

簇索引并不是索引的一种分支类型,更确切的说,它是数据存储的一种方式.它和普通索引仅仅在实现上有着不同的区别,Innodb的簇索引实际是将索引和数据存储在同一B-Tree中的存储结构.当某表中含有簇索引,表中的数据实际是存储在索引树的叶节点中.所谓的"簇",意思着包含相邻键的数据也存储在相邻的区域中.每张表只能存在唯一一个簇索引,因为你总不能把一份数据同时存储在两个地方.因为索引的实现是各个存储引擎实现的一部分,不是所有的存储引擎都只是簇索引.目前有solidDb和Innodb对簇索引提供了支持.我们这里主要对Innodb的簇索引进行讨论,但是其中的一些概念都适用于所有支持簇索引的存储引擎.

 

下图显示了簇索引的数据存储结构.注意,每个叶子节点包含的都是完整的数据行,而不像是内节点,仅仅包含的是被索引的列,在这个图里面,被索引的列是整型值.

 有些数据库服务器端会让你选择簇索引的索引列,但是目前的Innodb默认只会对表主键进行簇索引.意味着上图的整型值即为为主键.如果你的表中没有主键,Innodb会尝试用一个唯一非空字段作为其簇索引的索引列,如果没有这样的字段,Innodb会为你的表结构定义一个隐藏主键而对其进行簇索引.Innodb的簇索引以内存页为存储单元,所以,相邻索引值可能会存储在相隔很远的内存页中.

 

簇索引能提高检索效率,同样地也会带来其他的性能问题,所以,你应该对其进行慎重考虑,特别是你将一种存储引擎更改为Innodb时.簇索引有如下优点:

  • 簇索引能将可能的逻辑相关数据存储在一起.例如,为了实现一个邮箱管理器,你能对user_id进行簇索引,这样你就能对同一用户的所有邮件进行检索,不管这些邮件的存储时间是进还是远,如果没有对user_id建立主键关系,那么这样的一个需求可能就会引起很大的磁盘io问题.
  • 数据访问更加快速.簇索引不仅仅存储索引值,也同时存储了数据值,所以通过索引检索数据往往比寻址更加迅捷.
  • 能很轻松的获取主键,从而实现索引覆盖查询
利用簇索引能极大地提高表的查询效率,然后优点的一面必定有它所引起的缺点:
  • 簇索引会极大的增加io负荷.如果不是以在内存中的存储顺序进行数据访问,那么就根本达不到簇索引的目的,反而会增加系统的io
  • 数据的插入操作严重依赖于插入时的主键顺序.最好的方式是以主键顺序将数据载入innodb表中.
  • 更新簇索引的开销是极大的.因为和插入一样,如果不是按照逐渐顺序更新一条记录的主键,那么该记录以后的数据都将被更新
  • 更新以及插入数据时可能会导致数据页分隔
  • 全表的数据检索会变得更慢.
  • 包含簇索引的innodb表的其他二级索引会变得更大
  • 二级索引的检索必须通过簇索引以及本身索引,而不仅仅是通过本身的索引即可
  • 大小: 62.2 KB
分享到:
评论

相关推荐

    MySQL索引与优化:原理、策略及高级应用

    内容概要:本文详细介绍了MySQL中索引的基本概念、创建和管理索引的策略、查询优化技术以及性能调优实践。...通过学习本文,读者可以掌握MySQL索引和优化的核心技术,从而提升数据库管理和开发能力。

    MySql练习4:创建学生表和成绩表索引并查看索引.zip

    例如,查看`students`表的索引: ``` SHOW INDEX FROM students; ``` 或者在查询计划中查看索引使用情况: ``` EXPLAIN SELECT * FROM students WHERE name = '张三'; ``` 5. **索引维护**: 虽然索引能...

    mysql索引原理之聚簇索引1

    1、MySQL的索引: 在MySQL中,不同的存储引擎对索引的实现方式有所不同。例如,MyISAM引擎使用B+Tree结构,其叶子节点存储的是数据行的地址而非数据本身,因此无论是主索引还是辅助索引,都属于非聚簇索引。MyISAM还...

    mysql 索引与执行计划

    MySQL提供了多种方法来创建、查看和删除索引: - **查看索引**: ```sql SHOW INDEX FROM table_name \G ``` - **创建索引**: ```sql CREATE [UNIQUE] INDEX indexName ON mytable(columnname(length)); ...

    MySQL 索引最佳实践

    本文将深入探讨MySQL索引的最佳实践,旨在为开发者和数据库管理员提供实用指南。 ### 理解索引的重要性 索引的存在主要是为了加速数据库中的数据访问速度。在没有索引的情况下,数据库必须遍历整个表来查找特定的...

    MySql索引详解,索引可以大大提高MySql的检索速度

    打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...

    MySQL Innodb 索引原理详解

    ### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...

    mysql查询优化之索引优化

    - **InnoDB存储引擎的索引优化**:InnoDB支持行级锁定,其主键索引是聚簇索引,其他非主键索引是非聚簇索引。理解这些特性有助于更好地设计索引。 - **分区与分片**:对于超大型表,可以考虑使用分区或分片技术,将...

    国家开放大学 形考答案 mysql 实验训练4:视图和索引的构建与使用

    本资源为 MySQL 实验训练第四课,主要涵盖视图和索引的构建与使用。实验目的是基于已有的汽车用品网上商城数据库 Shopping,理解视图和索引的概念和作用,练习视图的基本操作,包括视图的建立、视图的查询、视图的...

    mysql的索引优化

    假设我们需要频繁查询`firstname`和`lastname`字段,那么可以考虑在这两个字段上创建一个联合索引: ```sql ALTER TABLE people ADD INDEX idx_firstname_lastname (firstname, lastname); ``` 这样,当执行类似于...

    MySQL索引类型大汇总

    可以通过以下三种方式创建普通索引: * 创建索引:`CREATE INDEX indexName ON mytable(username(length))` * 修改表结构:`ALTER mytable ADD INDEX [indexName] ON (username(length))` * 创建表时直接指定:`...

    高效MySQL查询加速指南:索引策略、查询优化、性能调优,助力数据库管理员和开发者突破性能瓶颈

    ### 高效MySQL查询加速指南:索引策略、查询优化、性能调优 在数据库管理和开发领域中,MySQL因其灵活性和高效性而受到广泛欢迎。然而,在面对大规模数据集时,即使是性能强大的MySQL也可能遇到查询速度慢的问题。...

    mysql索引和锁机制ppt介绍

    ### MySQL索引和锁机制详解 #### 一、索引基础 **索引定义:** 索引是MySQL中用于提高查询效率的一种数据结构。通过索引可以在数据表中快速定位到所需的数据行,大大减少不必要的全表扫描。 **索引的重要性:** 1....

    MySQL索引分析和优化.pdf

    ### MySQL索引分析和优化 #### 一、索引的重要性及原理 索引在数据库管理中扮演着极其重要的角色,特别是在提高数据检索速度方面。**MySQL索引**本质上是用来加快数据检索过程的一种数据结构,类似于书籍中的目录...

    MySQL索引 使用笔记

    【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...

    尚硅谷mysql高级:索引、优化

    一、MySQL索引 1. 索引类型:MySQL支持多种索引类型,包括B-Tree(默认索引类型)、Hash、Full-text(全文索引)以及R-tree(空间数据索引)。B-Tree索引适用于范围查询,而Hash索引适用于等值查询,Full-text索引...

    MYSQL索引知识

    MySQL索引知识是数据库管理中至关重要的一部分,它能显著提高数据查询的速度,特别是在处理大量数据时。索引就像书的目录,使得数据检索更为高效。MySQL中的索引主要有两种存储类型:BTREE(B树)和HASH。 1. **...

    MySQL索引最佳实践

    ### MySQL索引最佳实践 #### 一、理解MySQL索引的重要性 索引是数据库性能优化中最常用也是最重要的手段之一。合理的索引设计可以显著提高查询效率,减少服务器资源的消耗。在MySQL中,索引的选择与配置对于开发...

    MySQL索引:提升数据检索速度的加速器

    ### MySQL索引:提升数据检索速度的加速器 在当今高度数字化的世界中,数据库系统扮演着至关重要的角色,尤其是在Web应用程序领域。MySQL作为最受欢迎的关系型数据库管理系统之一,因其开源、跨平台、高性能等特点...

Global site tag (gtag.js) - Google Analytics