gpt4 book ai didi

MySQL - 使用一个查询的结果用于另一个查询

转载 作者:可可西里 更新时间:2023-11-01 07:12:54 24 4
gpt4 key购买 nike

假设我有这个,它产生 50,000 行:

SELECT photoID FROM photoSearch WHERE photoID BETWEEN 1 AND 50000;

我打算针对刚刚返回的那些 photoID 运行此查询。

SELECT COUNT(people) AS totalPeople, people
FROM people
INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID
WHERE photoid IN ('ID's from results')
GROUP BY people
ORDER BY totalPeople DESC

但我从其他人和资源中了解到,IN 子句不会很好地执行,尤其是当我有 100,000 多个照片 ID 时。

将来自顶级查询的照片 ID 存储在另一个表 (resultsTbl) 中或存储在一个很长的字符串中是个好主意吗?如果是,我是否使用连接或子选择来查询这些 ID(在底部查询中),而不是使用 IN?或者...是否有另一种方法可以在完成工作时牢记性能?

如有任何帮助,我们将不胜感激。

最佳答案

  1. 将顶级查询的 photoID 存储在另一个表 (resultsTbl) 或很长的字符串中是个好主意吗?

    • 在另一个表中:一般来说,没有。如果 ID 很多,你在其他地方执行 top 查询,那么将它存储在缓存表中可能没问题。不过,对于这种情况,“顶级查询”很可能会保留在内存中,因此您可能应该使用子查询。

    • 在很长的字符串中:不。字符串操作通常是高度 CPU 密集型的。

  2. 如果是,我是否使用连接或子选择来查询这些 ID(在底部查询中),而不是使用 IN?

    • 与其将其存储在临时表中,不如先执行 JOIN(参见下面的示例)。在某些情况下,数据库将为您加入 IN(select * from foo)

  • 使用 IN(子选择):

    SELECT     count(people) AS totalPeople
    , people
    FROM people
    INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID
    WHERE photoid IN (select photoID
    from photoSearch
    where photoID
    between 1 AND 50000)
    GROUP BY people
    ORDER BY totalPeople DESC
  • 使用连接

    SELECT     count(people) AS totalPeople
    , people
    FROM people
    INNER JOIN photopeople ON photoPeople.peopleID = people.PeopleID
    INNER JOIN photoSearch ON photopeople.photoid = photoSearch.photoID
    WHERE photoID between 1 AND 50000
    GROUP BY people
    ORDER BY totalPeople DESC

关于MySQL - 使用一个查询的结果用于另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438823/

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