减少时间查询

问题描述:

我试图运行下面的查询,但它需要花费很长的时间,因为数据是巨大的:减少时间查询

SELECT pre.Count AS Precount, consol.Count AS commoncount, post.Count AS Postcount, Precount-commoncount AS deleted, postcount-commoncount AS added 
FROM (SELECT COUNT([PRE_L]) AS [count] FROM PRE_LNADJL_2) AS pre, 
    (SELECT COUNT([PRE_L]) AS [count] FROM CD_LNADJL) AS consol, 
    (SELECT COUNT([Post_L]) AS [count] FROM POST_LNADJL_2) AS post; 
+2

1.请勿在整篇文章中使用大写字母,否则会被认为是喊叫,因此是粗鲁的。 2.请为您的问题使用适当的标签。它不能与MySQL有任何关系,因为它使用不同的方式来表示别名。访问标记是为了安全。 3.由于您正在计算3个表格中的所有记录,因此几乎没有优化的空间。 – Shadow

+0

你想要计算什么?所有记录?然后使用'COUNT(*)',如果表具有主键,则速度会更快。另外尝试分别运行3个子查询,看看它有多快。 – Andre

我们以前做的一个小动作,当我在一家审计我们的后端是SQL Server,我们正在处理一些超过5B记录的表。我们要做的是“预运行”我们的报告。也就是说,我们会过夜过滤数据并将其写入新表格。这样,所有更大,更耗时的计算都在没有人需要数据时完成。

我建议你在办公室里没有人的时候运行On Timer事件。在这种情况下,运行类似:

INSERT INTO pre SELECT COUNT([PRE_L]) AS [count] FROM PRE_LNADJL_2 
INSERT INTO consol SELECT COUNT([PRE_L]) AS [count] FROM CD_LNADJL 
INSERT INTO post SELECT COUNT([Post_L]) AS [count] FROM POST_LNADJL_2 

(你也可以做SELECT INTO的,任何一个取决于如果你想有放弃/重建或清除您的资料持有者表每到这个运行时间是罚款)

然后,只要您的用户需要运行此报告或不管它是什么,在SQL仅需要:

SELECT pre.Count AS Precount, consol.Count AS commoncount, post.Count AS Postcount, 
     Precount-commoncount AS deleted, postcount-commoncount AS added 
FROM (SELECT * FROM pre), 
(SELECT * FROM consol), 
(SELECT * FROM post); 

应在2秒内运行。