简单的问题。如何重写这样的查询:
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这样它就不会在一张大但不大的桌子上慢慢来?(假设有一百万行)。还是有可能在数据库上做一些其他的“魔术”来使查询快速运行?
在这种情况下,进一步规范数据是不可能的:)
请求的位附加信息
理想情况下,该解决方案可以同时适用于MySQL和MySQL 2008,尽管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中的每一项,获取表B中的所有项目及其类型,如表A所示。
然而,也有必要说:对于表A中的每一种“类型”,都要在表B中得到与之相关的信息摘要。这个问题涉及的是第二个情况:)
发布于 2014-04-09 11:00:10
您可以对外键使用非聚集索引,我的意思是在[A.Type]和[B.Type]上使用2个索引,还可以在选择[A.Name]、[B.value]的列上使用其他两个索引。
因此,查询所需的所有内容都在索引中。
发布于 2014-04-09 10:56:33
不确定您使用的是哪个数据库,但您可以确保外键tableA.type上有索引,tableB.type上还有包含tableB.value的索引。这样,SQL就不需要返回数据页来获取值,而只需从索引中检索它。您应该小心处理这个值,就好像它是一个很大的值一样,它会减慢索引的速度。
https://stackoverflow.com/questions/22960271
复制相似问题