gpt4 book ai didi

sql - 针对多对一关系优化 SQL 查询

转载 作者:行者123 更新时间:2023-12-03 17:36:14 25 4
gpt4 key购买 nike

我有两个具有多对一关系的表,我将它们称为 Parent_Table 和 Child_Table (即 parent 有零个或多个 child ,但 child 只有一个 parent )。我需要计算至少有一个 child 满足某些条件的 parent 的数量。哪个查询是最佳的?

选项1(很确定不是这个)

SELECT COUNT(DISTINCT(pt.ID)) 
FROM PARENT_TABLE pt
JOIN CHILD_TABLE ct
ON pt.ID = ct.PARENT_ID
WHERE <parent meets some condition>
AND <child meets some condition>

选项 2
SELECT COUNT(pt.ID)
FROM PARENT_TABLE pt
WHERE pt.ID in
(
SELECT ct.PARENT_ID
FROM CHILD_TABLE ct
WHERE <child meets condition>
)
AND <parent meets some condition>

选项3(我猜是最快的)
SELECT COUNT(pt.ID)
FROM PARENT_TABLE pt
WHERE EXISTS
(
SELECT 1
FROM CHILD_TABLE ct
WHERE ct.PARENT_ID = pt.ID
AND <child meets condition>
)
AND <parent meets some condition>

还是完全是别的东西?它取决于每个表的大小,还是两个条件的复杂性,或者数据是否排序?

编辑:数据库是甲骨文。

最佳答案

第一个查询很慢,其他查询应该在大多数数据库上运行得很快。

在不了解数据库的情况下,很难说更多:

但是:count(*) 通常比 count(names_field) 快,而且永远不会慢
count(distinct (afield)) 很慢

Or is it something else entirely?



这取决于数据库和数据库的确切版本。

Does it depend on the sizes of each table



是的,这很重要

or the complexity of the two conditions



可能的

or whether the data is sorted?



如果您想要快速选择,则必须对用于连接的所有字段进行索引。
并且 where 子句中使用的所有字段都必须是索引的或低基数的。

关于sql - 针对多对一关系优化 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7530426/

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