MySQL索引

聚簇索引和二级索引

每张InnoDB表都有一个特殊的索引叫聚簇索引,这个索引指定了数据应该存放在哪里。一般来说,聚簇索引等价于primary key。为了在查询,插入,以及其他操作中取得最优性能,你必须理解InnoDB是如何使用聚簇索引以优化每张表上最常见的查询和DML操作。

  • 但你为你的表定义一个PRIMARY KEY后,InnoDB会将它作为聚簇索引。如果表里没有unique且non-null列或者列集合时,可以添加一个自增列作为主键作为聚簇索引。

  • 如果你不指定PRIMARY KEY,MySQL会找到第一个UNIQUE且NOT NULL列作为聚簇索引。

  • 如果表里没有PRIMARY KEY以及合适的UNIQUE索引,InnoDB会生成一个叫GEN_CLUST_INDEX的隐式的聚簇索引。

聚簇索引是如何加速查询的

因为聚簇索引和它对应的行数数据是放在一起的,查询聚簇索引会直接找到存储数据的页面。如果一张表很大,相对于数据和索引在不同页面的架构,聚簇索引架构经常会节省磁盘I/O操作。

二级索引是如何关联到聚簇索引

除了聚簇索引,其他索引都是二级索引。在InnoDB中,二级索引的每条记录包含主键列,InnoDB用该主键列中的值来在聚簇索引中查找行。

如果主键很长,那么二级索引会占用很多空间,所以短主键是有好处的。

上一篇:MySQL如何查看、修改、删除索引


下一篇:通过XShell与远程Linux服务器互传文件