gpt4 book ai didi

mysql - 你能在 MySQL 中设计一个简单的例子,其中聚集索引是解决方案,而不是普通索引吗?

转载 作者:可可西里 更新时间:2023-11-01 08:01:17 25 4
gpt4 key购买 nike

我看不到聚簇索引的意义,我们什么时候才能受益?

最佳答案

聚集索引

聚簇索引意味着记录根据索引按顺序物理存储(至少彼此靠近)。当您按顺序从每条记录中检索不同的列时,聚簇索引最为重要,因为数据库引擎不必四处跳转以获取下一条记录。相反,记录是按顺序存储的,因此记录之间的查找时间最短。

在读取索引中彼此靠近的多个记录时,聚簇索引最为重要。

默认情况下,对于 InnoDB,您的主索引是聚集索引。

聚簇索引的用例

如果您正在执行增量搜索,例如 Google 和 Yahoo 搜索,当您开始输入时,您会看到前几条与您目前输入的内容相匹配的记录,那么性能是最重要的。如果您只返回结果集中的单个索引列,则不需要聚簇索引,但假设您还想返回每个关键字的命中数,从而强制数据库引擎访问实际行。由于您想要返回连续的行,因此您应该按顺序存储它们以获得最佳性能。

SELECT key_word, hits FROM keywords
WHERE key_word LIKE 'britney s%'
ORDER BY key_word
LIMIT 10

您希望您的主键(聚集索引)在 key_word 上。

与非聚集索引的比较

所有索引都按顺序物理存储(实际上是一个 btree,但基本上),所以如果您只返回存储在索引中的列,您仍然可以获得相同的好处。那是因为索引列的实际值存储在索引中,因此MySQL 将使用索引值而不是读取记录。但是,如果您开始检索不属于索引的列,这也是您还希望按顺序存储实际记录的地方,例如它们具有聚簇索引。

关于聚簇索引的 MySQL 文档

Accessing a row through the clustered index is fast because the row data is on the same page where the index search leads. If a table is large, the clustered index architecture often saves a disk I/O operation when compared to storage organizations that store row data using a different page from the index record. (For example, MyISAM uses one file for data rows and another for index records.)

In InnoDB, the records in nonclustered indexes (also called secondary indexes) contain the primary key columns for the row that are not in the secondary index. InnoDB uses this primary key value to search for the row in the clustered index. If the primary key is long, the secondary indexes use more space, so it is advantageous to have a short primary key.

MySQL Clustered and Secondary Indexes

关于mysql - 你能在 MySQL 中设计一个简单的例子,其中聚集索引是解决方案,而不是普通索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com