代码改变世界

MSSQL sql语句小试牛刀

2009-12-26 15:31  Mr.Longer  阅读(252)  评论(0编辑  收藏  举报

1:下面这种是比较简单的查询方法,通过查询前的时间和查询后的时间差来计算的
declare @begin_date datetime
declare @end_date datetime
select @begin_date = getdate()
<这里写上你的语句...>
select @end_date = getdate()
select datediff(ms,@begin_date,@end_date) as '用时/毫秒'

2:下面这种方法比较全面,将执行每个语句时采取的步骤作为行集返回,通过层次结构树的形式展示出来,输出中包含的列:详情点这里;

set statistics profile on
set statistics io on
set statistics time on
go
<这里写上你的语句...>
go
set statistics profile off
set statistics io off
set statistics time off

 

常用关键语句:
Rows
各运算符生成的实际行数

Executes
运算符执行的次数

StmtText
对于非 PLAN_ROW 类型的行,此列包含 Transact-SQL 语句的文本。对于 PLAN_ROW 类型的行,此列包含对操作的说明。此列包含物理运算符,也可以选择包含逻辑运算符。此列还可以跟一则由物理运算符决定的说明。有关详细信息,请参阅逻辑运算符和物理运算符引用。

StmtId
当前批处理中的语句数。

NodeId
当前查询中的节点的 ID。

Parent
父步骤的节点 ID。

PhysicalOp
节点的物理实现算法。仅限于 PLAN_ROWS 类型的行。

LogicalOp
此节点表示的关系代数运算符。仅限于 PLAN_ROWS 类型的行。

Argument
提供有关当前执行的操作的补充信息。此列的内容取决于物理运算符。

DefinedValues
包含一组以逗号分隔的此运算符所引入的值。这些值可以是出现在当前查询(例如,在 SELECT 列表或 WHERE 子句中)内的计算表达式,也可以是查询处理器为处理该查询引入的内部值。以后在该查询内的任何其他地方都可以引用这些定义的值。仅限于 PLAN_ROWS 类型的行。

EstimateRows
由此运算符生成的预计输出行数。仅限于 PLAN_ROWS 类型的行。

EstimateIO
此运算符的预计 I/O 开销。仅限于 PLAN_ROWS 类型的行。

EstimateCPU
此运算符的预计 CPU 开销。仅限于 PLAN_ROWS 类型的行。

AvgRowSize
通过此运算符传递的行的预计平均行大小(以字节为单位)。

TotalSubtreeCost
此操作和所有子操作的预计(累积)开销。

OutputList
包含当前操作正在提取的列的列表,此列表以逗号分隔。

Warnings
包含一组以逗号分隔的与当前操作相关的警告信息。警告消息可能包含字符串 "NO STATS:()" 和一组列表。此警告信息表示查询优化器曾尝试根据此列的统计信息做出决策,但没有找到可用的统计信息。因此,查询优化器不得不进行推测,这可能已导致选择了低效的查询计划。有关创建或更新列统计信息(这些统计信息有助于查询优化器选择更有效的查询计划)的详细信息,请参阅更新统计信息。此列可能选择包含字符串 MISSING JOIN PREDICATE,表示正在进行的联接(与表有关)未使用联接谓词。意外丢失联接谓词可能导致查询的运行时间比预期长得多,并返回一个巨大的结果集。如果出现此警告,请验证是否有意不使用联接谓词。

Type
节点类型。对于每个查询的父节点,这是 Transact-SQL 语句类型(如 SELECT、INSERT、EXECUTE 等)。对于表示执行计划的子节点,这是 PLAN_ROW 类型。

Parallel
0 = 运算符没有以并行方式运行。
1 = 运算符正在以并行方式运行。
EstimateExecutions
当前查询运行期间,预计将执行此运算符的次数。

 

3,创建测试表
CREATE TABLE [dbo].[tabTest] (
 [ID] [int] IDENTITY (1, 1) NOT NULL ,
 [unqValue] [uniqueidentifier] NOT NULL ,
 [intValue] [int] NOT NULL 
) ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[tabTest] WITH NOCHECK ADD 
 CONSTRAINT [PK_tabTest] PRIMARY KEY  CLUSTERED 
 (
  [ID]
 )  ON [PRIMARY] 
GO
 
ALTER TABLE [dbo].[tabTest] ADD 
 CONSTRAINT [DF_tabTest_unqValue] DEFAULT (newid()) FOR [unqValue]
GO
 
CREATE  INDEX [IX_tabTest_unqValue] ON [dbo].[tabTest]([unqValue]) ON [PRIMARY]
GO
 
declare @i int
declare @v int
 
set @i=0
while @i<10000
begin
    set @v=rand()*1000    
    insert into tabTest ([intValue]) values (@v)
    set @i=@i+1
end