简单的问题。我怎样才能重写这样的查询:SELECT COUNT(DISTINCT v))performance
SELECT a.name, MAX(b.value), MIN (b.value), COUNT(DISTINCT(b.value))
FROM tableA a
LEFT JOIN tableB b
ON a.type = b.type
WHERE b.value IS NOT NULL
GROUP BY a.name
这样,它不会在一个大而不是大规模的表上运行dog-slow? (比方说100万行)。或者是否有可能在数据库上做一些其他的“魔术”来使查询快速运行?
进一步标准化数据是不可能在这种特殊情况下:)
作为要求
理想的情况下,该解决方案将为MySQL和MS SQL Server 2008中的其他信息位,尽管SQL Server绝对是那些的优先考虑。
两个表应该是这样的:
Table A:
type INT NOT NULL PRIMARY KEY
name VARCHAR(500
Table B:
idTableC INT NOT NULL
type INT NOT NULL
value VARCHAR (50)
Table C:
idTableC INT NOT NULL PRIMARY KEY
...
所以一般情况下,我们想要去说:在表C中的每个项目,与它们的类型,表A规定得到表B中的所有项目
然而,还必须要能够说:在表格中的每一个“类型”,获得与它在表B.相关信息的内容是,这个问题我们关心的与:)这第二种情况下
1百万行是_nothing_。如果表被索引,那么1000万行表也是_nothing_ –
您使用的是什么RDBMS?如果您使用的是SQL Server 2012或更新的版本,我强烈建议使用列存储索引,因为这会加快这种查询速度达100倍。 – Dan
@alma do - 谢谢你的回答...是的,我知道这不是非常巨大,我的意思是说这是一个不平凡的大小。无论如何,在这种情况下 - 在哪里/如何创建适合该查询的索引? :) –