最近公司的项目准备优化一下系统的性能,希望在数据库方面看有没有提升的空间,目前压力测试发现数据库服务器压力还不够大,Web服务器压力也不是很大的情况下,前台页面访问却很慢,看有没有办法充分利用数据库服务器的性能,于是做了一个单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试。
测试环境:
● CPU:Inter Core2 Quad,Q8300,2.50GHz;
● 内存:4.00GB
● 系统:Windows 7 32位系统
● 数据库系统:SqlServer 2008,有两个实例,一个是默认实例,一个是命名实例QE2
测试数据:
67万真实的基金收益数据,将这个表的数据放到了3个数据库中,详细内容见下面的连接字符串配置:
- <add name ="Ins1_DB1" connectionString ="Data Source=.;Initial Catalog=TestDB;Integrated Security=True"/>
- <add name ="Ins1_DB2" connectionString ="Data Source=.;Initial Catalog=LocalDB;Integrated Security=True"/>
- <add name ="Ins2_DB" connectionString ="Data Source=.\QE2;Initial Catalog=TestDB;Integrated Security=True"/>
|
测试内容:
首先筛选出表中所有的基金代码,然后统计每只基金的最新收益率日期,对应的T-SQL代码如下:
- declare @max_fsrq datetime
- declare @currJJDM varchar(10)
- declare @temp table (jjdm2 varchar(10))
- declare @useTime datetime
- set @useTime =GETDATE ();
-
- insert into @temp(jjdm2)
- select jjdm from [FundYield] group by jjdm order by jjdm asc
-
- while EXISTS (select jjdm2 from @temp)
- begin
- set @currJJDM=(select top 1 jjdm2 from @temp)
- select @max_fsrq = MAX(fsrq) from [FundYield] where jjdm=@currJJDM
- delete from @temp where jjdm2 =@currJJDM
- print @max_fsrq
- end
-
- print 'T-SQL Execute Times(ms):'
- print datediff(ms,@useTime,getdate())
|
直接执行这个T-SQL脚本,在数据库表没有索引的情况下,耗费的时间是:
- T-SQL Execute Times(ms):
- 58796
|