gpt4 book ai didi

SQL 在单个表上执行 INNER JOIN 的替代方法

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

我有一个大表 (TokenFrequency),其中有数百万行。结构如下的 TokenFrequency 表:

表 - TokenFrequency

  • id - 整数,主键
  • 来源 - 整数,外键
  • token - 字符
  • 计数 - 整数

我的目标是选择其中两个源具有相同标记的所有行。例如,如果我的表看起来像这样:

id --- source --- token --- count
1 ------ 1 --------- dog ------- 1
2 ------ 2 --------- cat -------- 2
3 ------ 3 --------- cat -------- 2
4 ------ 4 --------- pig -------- 5
5 ------ 5 --------- zoo ------- 1
6 ------ 5 --------- cat -------- 1
7 ------ 5 --------- pig -------- 1

我想要一个 SQL 查询来为我提供源 1、源 2 和计数总和。例如:

source1 --- source2 --- token --- count
---- 2 ----------- 3 --------- cat -------- 4
---- 2 ----------- 5 --------- cat -------- 3
---- 3 ----------- 5 --------- cat -------- 3
---- 4 ----------- 5 --------- pig -------- 6

我有一个如下所示的查询:

SELECT  F.source AS source1, S.source AS source2, F.token, 
(F.count + S.count) AS sum
FROM TokenFrequency F
INNER JOIN TokenFrequency S ON F.token = S.token
WHERE F.source <> S.source

这个查询工作正常,但我遇到的问题是:

  1. 我有一个包含数百万行的 TokenFrequency 表,因此需要更快的替代方法来获得此结果。
  2. 我目前的查询是重复的。例如它的选择:
    source1=2, source2=3, token=cat, count=4
    source1=3, source2=2, token=cat, count=4
    这不是什么大问题,但如果有办法消除这些问题并反过来提高速度,那将非常有用

我遇到的主要问题是查询速度,我当前的查询需要几个小时才能完成。我认为是问题所在。我确信必须有一种方法来消除内部连接并仅使用 TokenFrequency 表的一个实例就可以获得类似的结果。我提到的第二个问题也可能会促进查询速度的提高。

我需要一种方法来重组此查询,以更快、更高效的方式提供相同的结果。

谢谢。

最佳答案

我需要更多信息来诊断速度问题,但要删除重复项,请将其添加到 WHERE:

AND F.source<S.source

关于SQL 在单个表上执行 INNER JOIN 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246965/

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