【发布时间】:2014-01-14 13:54:55
【问题描述】:
我不是 DBA,而且是 MS SQL 的新手...
我想知道一个 sql 语句是否表现不佳,更具体地说,我想知道一个交叉连接选择是否表现不佳。不是与另一个选择语句相比,如果它是对原始语句的重新表述,可能会更有效,而是与它本身相比(我知道这有点含糊......)。
例如我有下表:
我的表有 > 100K 条目。
我运行以下选择:
select * from dbo.pcopy as p1, dbo.pcopy as p2;
完成需要一天以上的时间。这也许是好的,但我如何确定这一点???
我看到了以下选择,但不明白如何从中得出性能不佳指标:
select * from sys.dm_exec_query_Stats
【问题讨论】:
-
好吧,你为超过 100 亿行选择了所有列两次,你怎么能期望“好”的性能?
-
您到底希望查询做什么?您真的需要所有数据的笛卡尔结果吗?
-
我并不期待“好”的表现。我对此不抱任何期望。我只是希望能够获得一些关于查询的“有意义的”指标。我选择它是因为它似乎应该对数据库产生不利影响。
-
如果您的表有超过 10 万个条目,则查询的结果有超过 100,000*100,000 = 10,000,000,000 行。一百亿行是很多行。如果每行有 100 个字节,那么您正在谈论存储 TB 的结果。我想不出在这么大的表上需要交叉连接的合理问题。您应该回顾一下为什么要这样做并提出更好的查询。
-
您可以查看该查询的等待统计信息。我想它很可能是
ASYNC_NETWORK_IO这是瓶颈。如果你要把它排除在等式之外,你可以看看下一个瓶颈,依此类推。不过,对于这样一个不切实际的例子,我真的不明白这样做的意义。
标签: sql sql-server performance database-performance query-performance