gpt4 book ai didi

mysql - 如果字段将在两个单独的 WHERE 子句中使用,是否应该在此处使用复合索引?

转载 作者:行者123 更新时间:2023-11-29 14:24:45 25 4
gpt4 key购买 nike

好的,我知道何时应该使用索引以及使用它的优缺点的基础知识。

这些是我的查询的(唯一)两种方式:

SELECT target_id FROM map WHERE table_name = '' AND fingerprint = '' AND source_id = 1;

SELECT fingerprint, source_id FROM map WHERE table_name = '' AND target_id = 1;

我知道我必须通过第一个查询对字段 table_namefingerprintsource_id 建立索引。还有第二个查询的 target_id 。我可以单独做这件事。但我听说如果我可以将所有字段索引为一个,复合键可以提供更好的性能。由于我的情况非常具体,不会有另一个 WHERE 子句,因此我考虑创建如下复合键:

(table_name, fingerprint, source_id)

(table_name, target_id)

但是由于 table_name 在两个复合索引中重叠,我不确定这是否是正确的方法。这种重叠会对性能产生影响吗?

当我进行一些测试时,我没有得到任何性能改进,两者都同样快。我现在只有几万条记录,可能就是这个原因。但数据将扩展到数百万条记录。所以我想咨询一下专家的意见。谢谢。

最佳答案

就您尝试运行的查询而言,您拥有的两个索引是正确的。但是,我不确定 table_name 字段上的索引。 VARCHAR 字段上的索引往往非常慢( this answer 指的是 PostgreSQL,但基本概念是相同的),并且会增加数据库的大小,同时使 INSERT 速度变慢。

我使用的解决方案是创建一个查找表,如果我需要一个查询来提供 VARCHAR 字段,我只需在查找表上运行 JOIN 即可。 INT 上的 JOIN 往往相当快且可扩展。

关于mysql - 如果字段将在两个单独的 WHERE 子句中使用,是否应该在此处使用复合索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203980/

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