我有3个表a,b,c。
select * from a
select * from b where aid in (select id from a)
select * from c where bid in (select Id from b where aid in (select id from a))
这些查询在sp中工作正常,但作为性能我需要优化这些。 您能否建议我如何改进性能或任何可用的工具 优化SQL查询。
谢谢。
答案 0 :(得分:3)
我认为您可以使用INNER JOIN
重写查询:
select * from c
INNER JOIN b ON b.id = c.bid
INNER JOIN a ON a.id = b.aid
如果你有id,bid和aid的索引都应该没问题
答案 1 :(得分:2)
查询速度慢的原因可能有很多。根据您的描述,一些起点可能是:
您可能希望使用Tuning Advisor和/或SQL Server Profiler - 在启动时在SQL Server文件夹下的“性能工具”菜单中都可以使用。
此外,学习管理工作室报告的可能性,熟悉执行计划是很好的起点。
对于更高级的学员,开始包括查询I / O的统计信息(在Management Studios查询窗口中),使用Windows性能监视器来关注相关的SQL Server计数器等。对其中一些人的一个很好的解释可以在这里找到:http://www.sql-server-performance.com/2005/sql-server-performance-monitor-coutners/
答案 2 :(得分:0)
您能表达如下问题:
select * from b where b.aid = a.id and a.somefield = 'value'
答案 3 :(得分:0)
您也可以尝试使用exists而不是IN:s。如果有大量数据可以提供帮助:
SELECT
*
FROM
a
SELECT
*
FROM
b
WHERE EXISTS
(
SELECT
NULL
FROM
a
WHERE
a.id=b.aid
)
SELECT
*
FROM
c
WHERE EXISTS
(
SELECT
NULL
FROM
b
WHERE
c.bid=b.Id
AND EXISTS
(
SELECT
NULL
FROM
a
WHERE
b.aid=a.id
)
)
答案 4 :(得分:0)