微网站 淘宝客,什么公司做网站好,室内设计多久能学出来,百度收录网站图片索引文件 聚集索引和非聚集索引 其实#xff0c;我们的汉语字典的正文本身就是一个聚集索引。比如#xff0c;我们要查“安”字#xff0c;就会很自然地翻开字典的前几页#xff0c;因为“安”的拼音是“an”#xff0c;而按照拼音排序汉字的字典是以英文字母“a”开头并以… 索引文件 聚集索引和非聚集索引 其实我们的汉语字典的正文本身就是一个聚集索引。比如我们要查“安”字就会很自然地翻开字典的前几页因为“安”的拼音是“an”而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”
开头的部分仍然找不到这个字那么就说明您的字典中没有这个字同样的如果查“张”字那您也会将您的字典翻到最后部分因为“张”的拼音是“zhang”。也就是说字典的正文部分本身就是一个目录您不需要再去查其他目录来找到您需要找的内容。
我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。如果您认识某个字您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字不知道它的发音这时候您就不能按照刚才的方法找到您要查的字而需要去根据“偏旁部首”查到您要找的字然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法比如您查“张”字我们可以看到在查部首之后的检字表中“张”的页
码是672页检字表中“张”的上面是“驰”字但页码却是63页“张”的下面是“弩”字页面是390页。很显然这些字并不是真正的分别位于“张”字的上下方现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字但它需要两个过程先找到目录中的结果然后再翻到您所需要的页码。
我们把这种目录纯粹是目录正文纯粹是正文的排序方式称为“非聚集索引”。通过以上例子我们可以理解到什么是“聚集索引”和“非聚集索引”。
进一步引申一下我们可以很容易的理解每个表只能有一个聚集索引因为目录只能按照一种方法进行排序。 聚集索引Clustered Index特点 聚集索引的叶节点就是实际的数据页聚集索引中的排序顺序仅仅表示数据页链在逻辑上是有序的。而不是按照顺序物理的存储在磁盘上 行的物理位置和行在索引中的位置是相同的每个表只能有一个聚集索引但索引可以包括很多列聚集索引的平均大小大约为表大小的5%左右 使用聚集索引或非聚集索引的场景 (注优先级依次为推荐应不应) 主键和聚集索引的比较 索引的优点与缺点 创建索引可以大大提高系统的性能。 第一通过创建唯一性索引可以保证数据库表中每一行数据的唯一性。第二可以大大加快 数据的检索速度这也是创建索引的最主要的原因。第三可以加速表和表之间的连接特别是在实现数据的参考完整性方面特别有意义。第四在使用分组和排序 子句进行数据检索时同样可以显著减少查询中分组和排序的时间。第五通过使用索引可以在查询的过程中使用优化隐藏器提高系统的性能。也许会有人要问增加索引有如此多的优点为什么不对表中的每一个列创建一个索引呢这种想法固然有其合理性然而也有其片面性。虽然索引有许多优点 但是为表中的每一个列都增加索引是非常不明智的。这是因为增加索引也有许多不利的一个方面。 第一创建索引和维护索引要耗费时间这种时间随着数据 量的增加而增加。第二索引需要占物理空间除了数据表占数据空间之外每一个索引还要占一定的物理空间如果要建立聚簇索引那么需要的空间就会更大。第三当对表中的数据进行增加、删除和修改的时候索引也要动态的维护这样就降低了数据的维护速度。索引是建立在数据库表中的某些列的上面。因此在创建索引的时候应该仔细考虑在哪些列上可以创建索引在哪些列上不能创建索引。一般来说应该在这些列 上创建索引例如 在经常需要搜索的列上可以加快搜索的速度在作为主键的列上强制该列的唯一性和组织表中数据的排列结构在经常用在连接的列上这 些列主要是一些外键可以加快连接的速度在经常需要根据范围进行搜索的列上创建索引因为索引已经排序其指定的范围是连续的在经常需要排序的列上创 建索引因为索引已经排序这样查询可以利用索引的排序加快排序查询时间在经常使用在WHERE子句中的列上面创建索引加快条件的判断速度。同样对于有些列不应该创建索引。一般来说不应该创建索引的的这些列具有下列特点 第一对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为既然这些列很少使用到因此有索引或者无索引并不能提高查询速度。相反由于增加了索引反而降低了系统的维护速度和增大了空间需求。第二对于那 些只有很少数据值的列也不应该增加索引。这是因为由于这些列的取值很少例如人事表的性别列在查询的结果中结果集的数据行占了表中数据行的很大比 例即需要在表中搜索的数据行的比例很大。增加索引并不能明显加快检索速度。第三对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为这些列的数据量要么相当大要么取值很少。第四当修改性能远远大于检索性能时不应该创建索 引。这是因为修改性能和检索性能是互相矛盾的。当增加索引时会提高检索性能但是会降低修改性能。当减少索引时会提高修改性能降低检索性能。因 此当修改性能远远大于检索性能时不应该创建索引 创建索引 CREATE INDEX 索引的名字 ON tablename (列的列表); 修改表 ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表); 创建表的时候指定索引 CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) ); 主键 : 主键是一种唯一性索引但它必须指定为“PRIMARY KEY”。主键一般在创建表的时候指定 动态哈希 MySQL动态hash结构 Dynamic Hashing 引用 数据库索引的基础知识 数据库索引 MySQL数据库索引的4大类型以及相关的索引创建 转载于:https://www.cnblogs.com/bishi/p/5699010.html