poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。在poptest的loadrunner的培训中,为了提高学员性能优化的经验,加入了很多服务器方面的优化知识,为性能调优的能力打下基础。今天sqlserver的性能测试方面的知识。(大家对课程感兴趣,请加qq:564202718)
性能测试的分析都有一定的方法和思路,这次我们来看看sqlserver方面的性能的知识。
数据库开发者在存储过程和脚本中使用局部变量,但是,局部变量会影响查询的性能。我们创建一个表并插入一些测试数据:
USE AdventureWorks
GO
CREATE
TABLE
TempTable
(tempID UNIQUEIDENTIFIER,tempMonth
INT
, tempDateTime DATETIME )
GO
INSERT
INTO
TempTable (tempID, tempMonth, tempDateTime)
SELECT
NEWID(),(
CAST
(100000*RAND()
AS
INT
) % 12) + 1 ,GETDATE()
GO 100000
-- (EXECUTE THIS BATCH 100000 TIME)
CREATE
NONCLUSTERED
INDEX
[IX_tempDateTime]
ON
[dbo].[TempTable]
([tempDateTime]
ASC
)
INCLUDE ( [tempID])
WITH
( ALLOW_ROW_LOCKS =
ON
, ALLOW_PAGE_LOCKS =
ON
)
ON
[
PRIMARY
]
GO
SET
STATISTICS
IO
ON
GO
SELECT
*
FROM
TempTable
WHERE
tempDateTime >
'2015-10-10 03:18:01.640'
查询优化器根据基本统计直方图来预估数据行数,即:EQ_ROWS + AVG_RANGE_ROWS (77 + 88.64286) DBCC SHOW_STATISTICS ('dbo.TempTable', IX_tempDateTime)