【发布时间】:2014-04-01 22:01:27
【问题描述】:
The code originates from the following post:
What SQL can I use to retrieve counts from my payments data?
我正在处理大量数据,并且此代码(在 MS-ACCESS JET SQL 中)目前需要大约 10-15 分钟来查询(当它不崩溃时)。我想提高查询运行的速度,这就是为什么我希望使用直通查询方法。目前,我使用的后端数据库是 SQL Server (2012),我使用 ODBC 连接进行链接。
我的印象是,用后端数据库的语言编写 SQL 可以更有效地执行直通查询。我相信 T-SQL 将成为语言。我做了研究,确实没有“JET-SQL 到 T-SQL 转换器”。因此,请问是否有人对以下代码在 T-SQL 中的读取和外观有任何建议。
TRANSFORM Nz(First(CountOfStudents),0) AS n
SELECT
YearNumber,
MonthNumber,
School
FROM
(
SELECT
YearNumber,
MonthNumber,
School,
[School Service Type],
COUNT(*) AS CountOfStudents
FROM
(
SELECT DISTINCT
mtr.YearNumber,
mtr.MonthNumber,
pym.[Student ID],
pym.School,
pym.[School Service Type]
FROM
MonthsToReport AS mtr
INNER JOIN
PaymentsYearMonth AS pym
ON mtr.YYYYMM>=pym.StartYYYYMM
AND mtr.YYYYMM<=pym.EndYYYYMM
) AS distinctQuery
GROUP BY
YearNumber,
MonthNumber,
School,
[School Service Type]
) AS countQuery
GROUP BY
YearNumber,
MonthNumber,
School
PIVOT [School Service Type]
一如既往,感谢您抽出宝贵时间。
【问题讨论】:
-
您的具体问题是“我怎样才能使这个查询执行得更快”?如果您使用的是 SQL Server Management Studio,那么当您执行查询时,您可以检查查询执行计划,这将帮助您调试查询的性能。您可以识别执行计划中涉及繁重的 CPU 工作(例如表扫描)或传递的记录过多的部分。从那里您可以针对存在实际性能问题的性能改进。
-
@David:目前,当我使用 SQL Server Management Studio 时,在尝试运行上面提供的查询时出现错误。我认为是这种情况的原因是查询当前是用 MS-Access 的本机 SQL (JET SQL) 编写的,后端 SQL Server 无法读取(没有 MS Access 翻译它)。
-
将
nz更改为coalesce并重试。nz是 VBA 进入您的查询。coalesce是 T-SQL 等价物。 -
@Brad:你的合并建议不走运。
-
第一步找到在你的列名中加空格的人。第二步打那个人的脸。
标签: sql database tsql ms-access jet