MS SQL交叉连接性能评估

时间:2014-01-14 13:54:56

标签: sql sql-server performance database-performance query-performance

我不是DBA,也不熟悉MS SQL ......

我想知道sql语句是否表现不佳,更具体地说,我想知道交叉连接选择是否表现不佳。不是与另一个选择语句相比,如果它是原始语言的重新组合可能更有效,但与自身相比(我明白这有点模糊......)。

例如,我有下表:

table columns

我的桌子有> 100K条目。

我运行以下选择:

select * from dbo.pcopy as p1, dbo.pcopy as p2;

完成需要一天的时间。也许,这很好,但我怎么能确定这个???

我已经看到以下选择,但无法理解如何从中获取糟糕的性能指标:

select * from sys.dm_exec_query_Stats

1 个答案:

答案 0 :(得分:1)

基本上,您可以通过比较查询读取的页数和返回的行数来表示查询性能不佳。例如,如果您读取数千页以返回一行,则查询执行效果不佳。在您的示例中,您没有WHERE子句,因此没有很大的改进空间。你正在做一个没有标准的笛卡尔积,所以这里没什么可做的。您需要多次所有数据,以便获得它。

如果要改进“真实”查询,第一步是查看他们需要在每个表上执行的读取。查阅次数越少,查询越好。为此,请启用IO统计信息:

SET STATISTICS IO ON

在运行查询之前。您将在Management Studio的消息窗格中读取每个表的统计信息(以页为单位)。 您还可以使用您提到的动态管理视图。将读取与返回的行进行比较(返回的行将自SQL Server 2008 R2 SP1添加到此视图中)

SELECT 
    t.text, 
    execution_count, 
    total_logical_reads, 
    last_logical_reads, 
    min_logical_reads, 
    max_logical_reads,
    total_rows, 
    last_rows, 
    min_rows, 
    max_rows
FROM sys.dm_exec_query_Stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) t