MySQL非聚簇索引&&二级索引&&辅助索引

MySQL非聚簇索引&&二级索引&&辅助索引

mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes)。

以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引。如果您的表上定义有主键,该主键索引是聚集索引。如果你不定义为您的表的主键时,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚集索引。如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。

聚簇索引:http://my.oschina.net/xinxingegeya/blog/474895

如下除主键外都是二级索引,或叫做辅助索引。

> show create table article

******************** 1. row *********************
       Table: article
Create Table: CREATE TABLE `article` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `shortName` varchar(255) NOT NULL,
  `authorId` int(11) NOT NULL,
  `createTime` datetime NOT NULL,
  `state` int(11) NOT NULL,
  `totalView` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_short_name_title` (`title`,`shortName`),
  KEY `idx_author_id` (`authorId`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
1 rows in set

=======END=======

MySQL非聚簇索引&&二级索引&&辅助索引

时间: 2024-10-05 04:01:46

MySQL非聚簇索引&&二级索引&&辅助索引的相关文章

MySQL 聚簇索引&&二级索引&&辅助索引

MySQL非聚簇索引&&二级索引&&辅助索引 mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引都是二级索引,又叫辅助索引(secondary indexes). 以InnoDB来说,每个InnoDB表具有一个特殊的索引称为聚集索引.如果您的表上定义有主键,该主键索引是聚集索引.如果你不定义为您的表的主键时,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚集索引

Mysql聚簇索引 二级索引 辅助索引

Mysql聚簇索引 二级索引 辅助索引 索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引中包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(BTree)中,使SQL可以快速有效地查找与键值关联的行. 为什么要建索引,即索引的优点 没有索引则检索过程变成了顺序查找,O(n)的时间复杂度几乎是不能忍受的. 建立索引的列可以保证行的唯一性,生成唯一的rowId 建立索引可以有效缩短数据的检索时间 建立索引可以加快表与表之间的连接 为用来排序或者是分组的

MySQL聚簇索引和非聚簇索引的对比

首先要清楚:聚簇索引并不是一种单独的索引类型,而是一种存储数据的方式. 聚簇索引在实际中用的很多,Innodb就是聚簇索引,Myisam 是非聚簇索引. 在之前我想插入一段关于innodb和myisam的数据文件的对比: innodb一张表在硬盘上通过两个文件存储:tablename.frm,tablename.ibd,而myisam有三个文件:tablename.frm,tablename.myi,tablename.myd. frm是表结构文件,myi是索引文件,myd是数据文件,ibd是数

关于MySQL InnoDB表的二级索引是否加入主键列的问题解释

关于MySQL InnoDB表的二级索引是否加入主键,总结如下: 1对于MySQL InnoDB表的二级索引是否加入主键,官方也有明确的说明,建议线上MySQL的二级索引创建时强制加入主键所有的列,可以做到所有的MySQL 版本统一. 2.MySQL 5.6.9之前,InnoDB引擎层是会对二级索引做自动扩展,但是优化器不能识别出扩展的主键. 3.MySQL 5.6.9开始InnoDB引擎层是会对二级索引做自动扩展,优化器能识别出扩展的主键. 4.索引的大小一样,二级索引有没有加入主键列,在In

1226关于count(*)不走主键索引反而走二级索引

转自 http://www.2cto.com/database/201508/433975.html mysqlcount(*)会选哪个索引? 2015-08-19      0个评论    来源:Database.Code   收藏    我要投稿 今天在查询一个表行数的时候,发现count(1)和count(*)执行效率居然是一样的.这跟Oracle还是有区别的.遂查看两种方式的执行计划: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 mysq

聚簇索引与非聚簇索引

索引是一种数据结构,用来快速访问数据库表格或者视图中的数据. 索引的目的是加快对表中数据记录的查找或排序. 索引的代价一是增加了数据库的存储空间,二是在插入和修改时要花费更多的时间. 索引有两中形式,聚簇索引和非聚簇索引 聚簇索引也叫聚集索引,是一种对磁盘上数据重新组织以按指定 的一个或多个列的值排列.每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表120%的附加空间,以存放该表的副本和索引中间页. 非聚簇索引的索引顺序与数据物理顺序无关. 聚簇索引和非聚簇的区别: 1.聚簇索引的叶节点

Clustered Index & Non Clustered Index(聚簇索引和非聚簇索引)

每个表只能有一个聚簇索引,而能有200多个非聚簇索引. 在物理分配上, 每个表的数据都是分配在页上,一个页大概有8k左右,假设一条数据占1000字节的话,那么8000条数据占8000*1k/8k = 1000页面,这些数据存在于数据块中. 如果对这些数据中的某一10字节的字段做聚簇索引的话,8000 * 0.01k /8k = 10 页面,那么10页面作为存储这些索引而存在.并存放于索引块 如果对这些数据中的某一10字节的字段做非聚簇索引的话,2 * 8000 * 0.01k /8k = 20 

聚簇索引和非聚簇索引的区别

一.聚簇索引和非聚簇索引 1.聚簇索引和非聚簇索引: 我拿查字典做一个比喻,字典的页面就好比是物理排列顺序,物理排列顺序是固定的,查询的方式就好比是索引,区别是聚簇索引就好比是拼音查询,每一个字母查询出来的页面顺序是跟你字母的顺序一致的,a字母查询出来的页面一定是在c字母查询出来的页面前面,而非聚簇索引就好比是笔画查询,笔画少的查出来的页面不一定在笔画多的查出来的页面前面,也就是你通过笔画查询的顺序和页面的顺序并不是一致的. 再举一例:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的索引顺

mysql索引总结(2)-MySQL聚簇索引和非聚簇索引

聚簇索引就是对磁盘上的实际数据重新组织以按照特定的一个或者多个列的值排序的算法 特点是存储数据的顺序和索引顺序一致 一般情况下主键会默认生成聚簇索引 且一张表有且只有一个聚簇索引 聚簇索引和非聚簇索引的区别是: 聚簇索引的叶子节点就是数据节点 而非聚簇索引的叶子节点仍然是索引文件 只是这个索引文件中包含指向对应数据块的指针 MySQL中不同的数据存储引擎对聚簇索引有不同的支持 MyISAM使用的是非聚簇索引 原始数据 存储方式 按照列值和行号来组织索引的 叶子节点中保存的实际上是指向存放数据块的