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

公益慈善北京中科在行动 http://m.39.net/disease/a_5972953.html

聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

1、聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需要至少相当该表%的附加空间,以存放该表的副本和索引中间页。

2、如果创建了一个主键,InnoDB会将其用作聚簇索引。如果主键没有逻辑唯一且非空的列或列集,最好是设置成自动递增的,如果没有为表创建主键,则MySQL会在所有键列都不为NULL的情况下找到第一个UNIQUE索引,InnoDB会将其用作聚集索引,如果表没有PRIMARYKEY或合适的UNIQUE索引,则InnoDB在包含行ID值的合成列上内部生成一个名为GEN_CLUST_INDEX的隐藏的聚集索引(隐藏的是看不到的,也就是说不会出现在desctable中,行ID是一个6字节的字段,随着插入新行而单调增加)从这三种情况来看的话,就是说不管你有没有创建主键,mysql都会给你弄一个聚簇索引给安排上,你创建了就用你设置的主键为聚簇索引,没有创建就给你来个隐藏的。

3、能走聚簇索引的尽量走聚簇索引,也可以说是尽量走主键。看起来都是走索引,实际上主键要更快。而且主键索引如果是自增的int类型,因为长度比较小,占用的空间也比较小。id在联合索引指向的key上,age和name共同组成了联合索引,因此数据都在(age,name)的联合索引上,并不需要回表在去查询一次,可以大大提高查询得效率。当然这个查询要比较频繁,使用率比较高,毕竟创建索引也是要消耗资源的,实际情况要根据查询频率和索引大小来做出判断。




转载请注明:http://www.aierlanlan.com/rzdk/1311.html