Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 聚集索引和非聚集索引中使用的数据结构_Sql_Database_Indexing_Relational Database_Database Indexes - Fatal编程技术网

Sql 聚集索引和非聚集索引中使用的数据结构

Sql 聚集索引和非聚集索引中使用的数据结构,sql,database,indexing,relational-database,database-indexes,Sql,Database,Indexing,Relational Database,Database Indexes,我阅读了关于聚集索引和非聚集索引的文章,得出结论,我们对聚集索引使用哈希,对非聚集索引使用B+树(或B树)。我的结论正确吗?如果没有,那么在数据结构级别上这两者有什么区别呢?简单地说,我们可以像下面这样解释 聚集索引和非聚集索引都遵循b-树结构 for clustered index leaf node of the b-tree structure contains the Actual data. for non clustered index leaf node of the b-tree

我阅读了关于聚集索引和非聚集索引的文章,得出结论,我们对聚集索引使用哈希,对非聚集索引使用B+树(或B树)。我的结论正确吗?如果没有,那么在数据结构级别上这两者有什么区别呢?

简单地说,我们可以像下面这样解释

聚集索引和非聚集索引都遵循b-树结构

for clustered index leaf node of the b-tree structure contains the Actual data.
for non clustered index leaf node of the b-tree structure points the address of the actual data.
这个答案是在问题似乎集中在MySQL上时写的

既然您已经标记了问题[mysql],我们应该将讨论限制在RDBMS可能的范围内

现在你最应该使用的“引擎”是InnoDB。它主要有B+树索引。(它也有
全文
空间
,但我不会讨论它们。)它没有“散列”

主键是一个聚集的B+树。所有数据由PK排序并存储到一个B+树中。PK只能是群集的,也只能是BTree。PK也是唯一的(在MySQL中)

辅助键也是B+树。它们包含二级索引的列。在叶节点处是主键的列。通过二级索引的“点查询”需要向下钻取二级B树,然后向下钻取主键。辅助密钥不能“群集”

对于一般用途,BTree是最好的。杂烩很少有更好的。散列对于范围扫描是无用的,而作为BTree,尤其是B+树,对于这样的扫描是极好的


当索引大于可以缓存在RAM中的值时,哈希非常糟糕。通常,您要访问的“下一个”键与您触摸的最后一个键不相邻,因此很有可能需要I/O。

那么什么时候使用哈希?哈希将针对较大的字符串生成较短的固定长度键。。如果你想了解更多关于散列的信息,请阅读以下链接@UnnikrishnanR上的文章-该链接讨论的是MSSql,而不是MySQL。基本上这是一个采访问题,我被问到在聚集索引和非聚集索引中使用散列和B树的位置。我该怎么回答呢?这要看情况而定。如果这个职位只针对MySQL,那么这个问题毫无意义,你最好的回答可能是(礼貌地)指出他们对MySQL的了解比你少。如果这个职位可能涉及其他引擎(MSSql、Oracle、Postgres等),那么我没有给你他们想要的答案——也就是说,你理解“聚集索引”、“散列”与“BTree”(可能还有“B+树”)、“主”与“次”、“唯一”等概念。在维基百科上查找。这些术语大多是正交的。感谢您的回复,但请告诉与之相关的解决方案,因为一般情况(包括MSSql、Oracle、Postgres等)建议您更改标签以避免明显的MySQL焦点,然后希望其他人也加入。(我没有足够的信息广度或通用性来给你一个最新的答案。)