Clustered and Secondary Indexes

secondary index

  A type of InnoDB index that represents a subset of table columns. An InnoDB table can have zero, one, or many

secondary indexes. (Contrast with the clustered index, which is required for each InnoDB table, and stores the data for

all the table columns.)

 

  Every InnoDB table has a special index called the clustered index where the data for the rows is stored. Typically, the

clustered index is synonymous with the primary key. To get the best performance from queries, inserts, and other database

operations, you must understand how InnoDB uses the clustered index to optimize the most common lookup and DML

operations for each table.

  • When you define a PRIMARY KEY on your table, InnoDB uses it as the clustered index. Define a primary key for each table

that you create. If there is no logical unique and non-null column or set of columns, add a new auto-increment column, whose

values are filled in automatically.

  • If you do not define a PRIMARY KEY for your table, MySQL locates the first UNIQUE index where all the key columns are

NOT NULL and InnoDB uses it as the clustered index.

  • If the table has no PRIMARY KEY or suitable UNIQUE index, InnoDB internally generates a hidden clustered index on a synthetic

column containing row ID values. The rows are ordered by the ID that InnoDB assigns to the rows in such a table. The row ID is

a 6-byte field that increases monotonically as new rows are inserted. Thus, the rows ordered by the row ID are physically in

insertion order.

How the Clustered Index Speeds Up Queries

  Accessing a row through the clustered index is fast because the index search leads directly to the page with all the row data.

If a table is large, the clustered index architecture often saves a disk I/O operation when compared to storage organizations

that store row data using a different page from the index record. (For example, MyISAM uses one file for data rows and another

for index records.)

How Secondary Indexes Relate to the Clustered Index

  All indexes other than the clustered index are known as secondary indexes. In InnoDB, each record in a secondary index

contains the primary key columns for the row, as well as the columns specified for the secondary index. InnoDB uses this primary

key value to search for the row in the clustered index.

  If the primary key is long, the secondary indexes use more space, so it is advantageous to have a short primary key.

Clustered and Secondary Indexes的更多相关文章

  1. 14.8.9 Clustered and Secondary Indexes

    14.8.9 Clustered and Secondary Indexes 每个InnoDB 表有一个特殊的索引称为 clustered index 用于存储数据. 通常, clustered in ...

  2. 14.2.5.2 Clustered and Secondary Indexes

    14.2.5.2 Clustered and Secondary Indexes : 每个InnoDB 表 有一个特别的索引称为clustered index 行数据存储的地方. 典型的,cluste ...

  3. 在InnoDB,记录在 non-clustered indexes(也被称为secondary indexes) 包含了主键值

    In InnoDB, the records in non-clustered indexes (also called secondary indexes) contain the primary ...

  4. Clustered和Nonclustered Indexes 各自得特点和区别及长短处

    1 簇索引 簇索引对表的物理数据页中的数据按列进行排序然后再重新存储到磁盘上即簇索 引与数据是混为一体的它的叶节点中存储的是实际的数据由于簇索引对表中的数据一 一进行了排序因此用簇索引查找数据很快但由 ...

  5. InnoDB On-Disk Structures(二)--Indexes (转载)

    转载.节选于 https://dev.mysql.com/doc/refman/8.0/en/innodb-indexes.html This section covers topics relate ...

  6. Mysql加锁过程详解

    1.背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文, ...

  7. mysql事务和锁InnoDB

    背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备 ...

  8. [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键

    我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子 ...

  9. MySQL 加锁处理分析

    1    背景    1 1.1    MVCC:Snapshot Read vs Current Read    2 1.2    Cluster Index:聚簇索引    3 1.3    2P ...

随机推荐

  1. 设计模式之简单工厂模式(C#语言描述)

    严格意义上来说,简单工厂模式并不属于GoF的23种设计模式,但是它是学习其他工厂模式的基础和前提条件.理解了简单工厂模式,学习工厂方法模式和抽象工厂模式会比较容易一些. 简单工厂模式的定义 定义一个工 ...

  2. 我也来谈谈使用Zen Coding快速开发html和css原理

    zen coding 是一种仿css选择器的语法来快速开发html和css的开源项目.现已更名为Emmet.可以到github上下载拜读.在这个都想偷懒的世界里,此方法可以极大的缩短开发人员的开发时间 ...

  3. rabbitMQ 基本概念

    RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收.存储和转发消息.可以把消 息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上, RabbitM ...

  4. iOS定位服务CoreLocation

    欢迎訪问我的新博客: 开发人员说 基于LBS的应用开发是当今移动开发中的一大热门, 当中主要涉及到地图和定位两个方面. iOS开发中, 定位服务依赖于CoreLocation框架, CLLocatio ...

  5. objective-c的观察者模式

    addObserver即添加消息响应函数.postNotificationName即发消息.

  6. LINQ操作数组(交集,并集,差集,最值,平均,去重复)

    数组是大学里经常拿来做算法练习的对象.一些经典算法非常有价值,考试.装逼.面试都十分有用.但现在是效率时代,编程讲究生产效率,利用LINQ,可以让程序猿避免写一些基本算法,把精力花在业务处理上. 下面 ...

  7. hdu1584 A strange lift (电梯最短路径问题)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  8. 4.const

    const 放在*号的左边为指针常量,即:该指针所指向的内存空间不允许被修改.const放在*号的右边为常量指针,即:该指针的指向不允许被修改. 简单的说就是: 假设定义一个结构体 Teacher : ...

  9. NetBeans 设置界面语言

    我就懒得吐槽TNND你就不能让用户自己选择语言?这SB中文翻译我也是醉了,尽是误导人 下面的例子用jMonkeyEngine SDK的设置为例子(本质上就是NetBeans) 英文设置: 中文设置:

  10. java基础知识:自定义注解

    转自 深入了解注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解的作用就是负责注解其他注解.J ...