gpt4 book ai didi

sql - MySQL 是否使用现有索引来创建新索引?

转载 作者:行者123 更新时间:2023-11-29 01:12:24 26 4
gpt4 key购买 nike

我有一个包含数百万条记录的大表。

Table `price`
------------
id
product
site
value

表是全新的,没有创建索引。

然后我使用以下查询发出了创建新索引的请求:

CREATE INDEX ix_price_site_product_value_id ON price (site, product, value, id);

这花了很长时间,上次我检查跑了 5000+ 秒,因为机器。

我想知道如果我再发布一个索引创建,它会在过程计算中使用现有的索引吗?如果是,以什么形式?

接下来运行查询 1:

CREATE INDEX ix_price_product_value_id ON price (product, value, id);

接下来运行查询 2:

CREATE INDEX ix_price_value_id ON price (value, id);

最佳答案

I am wondering if I issue another index creation, will it use the existing index in the process calculation? If so in what form?

不,不会。

理论上,(site, product, value, id) 上的索引具有在这些字段的任何子集上构建索引所需的一切(包括 (product, value, id)(value, id)).

但是,不支持从二级索引构建索引。

首先,MySQL 不支持快速全索引扫描(即按物理顺序而不是逻辑顺序扫描索引),因此索引访问路径比表读取更昂贵。这对 InnoDB 来说不是问题,因为表本身总是集群的。

其次,这些索引中的记录顺序完全不同,因此无论如何都需要对记录进行排序。

然而,MySQL 中索引创建速度的主要问题是它在现场生成顺序(只是将记录一条一条地插入到 B-Tree 中) 而不是使用预分类源。正如@Daniel 提到的,快速创建索引解决了这个问题。它作为 5.1 的插件提供,并预装在 5.5 中。

关于sql - MySQL 是否使用现有索引来创建新索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845181/

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