gpt4 book ai didi

mysql - 当每个外键只需要一行时,SQL 会减少 SELECT 中完成的工作

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

下面是我拥有的数据示例,其中 ID 是另一个表(该表称为 test)中的外键。

+------+------+
| id | data |
+------+------+
| 1 | 100 |
| 1 | 110 |
| 1 | 105 |
| 2 | 105 |
| 2 | 150 |
| 2 | 120 |
| 2 | 320 |
| 3 | 300 |
| 3 | 400 |
| 3 | 500 |
+------+------+

我运行的 SELECT 语句(它给出了我正在寻找的结果)是:

select distinct(id) from test where data < 160 and data > 130;

如果外键与 WHERE 子句中的条件匹配,则此查询将返回外键。这为我提供了一个独特的外键列表,供我稍后使用。

根据我的理解,在这种情况下使用不同的并不会减少完成的工作,它只会过滤任何重复项的完整结果集。这意味着尽管我们有一个与行匹配的唯一外键:

|    2 |  150 |

其余行仍处于检查状态。

是否可以进行一个查询,首先检查是否已找到特定外键的匹配项,如果没有,则使用 WHERE 子句测试数据列。

最佳答案

一般来说,selectdistinct正在做聚合。聚合可能是很麻烦的操作,具体取决于数据库。

如果性能是一个考虑因素,您可以考虑如下查询:

select rt.id
from referencetable rt
where exists (select 1 from test t2 where t2.id = rt.id and t2.data < 160 and t2.data > 130);

referencetable 是其中 id 为主键的表。

此查询的优点是它将读取引用表,然后在 test 中查找值(可能在 (id, data) 的索引中) 。没有重复消除,因此在许多情况下,这可能是更快的方法。并不总是,但经常。

关于mysql - 当每个外键只需要一行时,SQL 会减少 SELECT 中完成的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702690/

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