Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 大规模计算其他两列的所有组合_Sql_Count_Scalable_Timesten - Fatal编程技术网

Sql 大规模计算其他两列的所有组合

Sql 大规模计算其他两列的所有组合,sql,count,scalable,timesten,Sql,Count,Scalable,Timesten,设置- 我有一个大而简单的查询,通常需要一两秒钟才能运行 SELECT DISTINCT t1.Col_1, t1.Col_2, t1.Col_3, Col_4, ... t2.Col_3, t3.Col_2, ... (14 columns total) FROM Table_1 t1 INNER JOIN Table_2 t2 ON (t1.COL_3 = t2.COL_1) ... (4 joins total, each on a different column in

设置- 我有一个大而简单的查询,通常需要一两秒钟才能运行

SELECT DISTINCT t1.Col_1, t1.Col_2, t1.Col_3, Col_4, ... t2.Col_3, t3.Col_2, ...
    (14 columns total)
FROM Table_1 t1 INNER JOIN Table_2 t2 ON (t1.COL_3 = t2.COL_1) ... 
    (4 joins total, each on a different column in Table_1)

表_1是主表,它的Col_1是整个数据库的主键(所有其他表中的一列都有一个外键)

问题- 如果我只在t1.Col_2和t1.Col_4上,我需要找到可能的最大计数。如中所示,对于表1第2列和第4列中的现有值组合,如果根据这些组合中的任何一个进行选择,我将得到的最大结果集是什么?对于scale,有超过200000个两列的独特组合

我试图通过收集COL_2和COL_4的所有组合来避免这个问题,然后使用这些组合查询计数,但测试~2500需要30分钟。那太慢了

我不想回答的是:

  • Col_2和Col_4存在多少独特的组合。及
  • 同一问题的小规模版本。其中有一些
我的最佳猜测-从一些排名较低的类似问题的答案来看,我认为

SELECT t1.Col_2, t1.Col_4, COUNT(DISTINCT t1.Col_1) AS total 
FROM TABLE_1 t1 INNER JOIN Table_2 t2 ...
GROUP BY t1.Col_2, t1.Col_4
ORDER BY COUNT(DISTINCT t1.Col_1) DESC //not necessary but useful for trying to analzye the results

应该告诉我我在寻找什么,但我的不确定性很高,有理由把它放在问题中,而不是作为自我回答发布。

你的DBMS是什么?它是否支持RANK?DBMS-timesten默认提供的任何命令行操作。是的,RANK是一个受支持的操作。数据库是Oracle timeten版本11.2.2.6.4您的最佳猜测很接近,但您需要
COUNT(*)
而不是
COUNT(DISTINCT t1.Col_1)
,它会更快,并且DISTINCT的计数可能错误。在您的设置查询中,可能也不需要DISTINCT,如果优化器无法删除它,这将导致巨大的开销。“所有其他表都只是在表1中的列上有一个外键。”-不清楚您的意思。表2的列1上是否有主键,列3上是否有表1外键到表2的主键?每隔一个表都直接从表1中规范化。因此,除了表_1之外的每个表都对表_1的一列有外键约束,并且没有使用“独立”主键。与直接编码的区别相比,它更像是一种语义区别,但我认为它会帮助那些可能在其他表中被忽略的人。