gpt4 book ai didi

mysql - 在 MySQL 中索引只有一列的表的性能

转载 作者:行者123 更新时间:2023-11-29 00:13:52 25 4
gpt4 key购买 nike

在仅包含物化查询主键的临时表上创建索引有什么好处吗?

我想从一个特定的表中删除一些数据,以及其他具有外键引用的相关表。为了提高性能,我将初始选择具体化为一个临时表,然后加入它以进行后续删除。

临时表只包含一列——来自子查询的主键。在临时表的 id 列上创建索引是否有任何性能优势?在我的测试中,我看到了大约 2% 的改进(更多被索引创建的开销所抵消),但可能可供我测试的数据集不够大。

CREATE TEMPORARY TABLE ids AS (SELECT id FROM tableA WHERE xxx);
DELETE tableB FROM tableB INNER JOIN ids ON tableB.a_id = ids.id;
DELETE tableC FROM tableC INNER JOIN ids ON tableC.a_id = ids.id;
...
DELETE tableA FROM tableA INNER JOIN ids ON tableA.id = ids.id;

由于 ids 临时表中的所有行都将用于删除 tableB 中的行(a_id 已建立索引),因此在 ids 临时表上创建主键/索引是否有任何性能优势?是否有更好、完全不同的方法来解决这个问题?

最佳答案

这完全取决于您运行的查询类型。如果您只运行需要读取或返回整个表或整个表的重要子集的查询,那么添加索引只会导致写入性能下降(它总是如此)。如果您将经常执行可以使用此类索引的查询来减少表中磁盘页面 I/O 的数量(因为您只查找一行,或者很小一部分行),那么添加索引将显着提高了这些查询的性能。

关于mysql - 在 MySQL 中索引只有一列的表的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23665723/

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