`
backspace
  • 浏览: 133691 次
文章分类
社区版块
存档分类
最新评论

浅谈sqlserver数据库优化(一)

 
阅读更多

今天暂时无事,风和日丽,万里无云。游山的、玩水的、遛麻雀的都闲的不亦乐乎,也忙的不亦乐乎。在这美好的季节,依旧躲在被窝或是电脑旁绞尽脑汁敲键盘的人们,也别有一番滋味。废话少说,言归正传。

赶上了一个最难就业季,总有很多不顺。前几天面试,被问了很多mvcsqlserver索引的问题,借这个时候来温习一下这些知识。

有一个人事数据库hrmis,里面的用户表叫A01,共7000条数据。

为了测试需要把这些数据,复制到另外一个测试数据库里。语句如下:

测试数据库为:funcunweiTest

use funcunweiTest
select  *  into peoTest  from hrmis..a01

   –-输出结果(7311行受影响)

注:SELECT INTO INSERT INTO SELECT 两种表复制语句】

 

索引使用的目的,是在大数据量的情况下提高查询速度,几千条数据库是看不出来很大差别的。为了实现大数据,我们可以不断的执行下面这个语句(小心硬盘空间不足,):

  insert  into peoTest  select  *  from peoTest

 

--【在耗费了3G的空间后,用count进行统计有将近375万条数据,可以满足我们的测试了。】

查询耗时我用的办法时,查询之前先声明一个时间,查询之后再声明一个时间,然后获得时间差。 

datediff(millisecond, 开始时间, 结束时间)  --millisecond 毫秒

 

 

【测试一】查看peoTest表只查询一个列耗时情况。

declare  @start  datetime, @end  datetime
set  @start = getdate()
select A0188  from peotest
set  @end = getdate()

select datediff(millisecond,@start,@end

--查询A0188耗时为:23706毫秒 A0188代表ID

--查询A019Z列耗时:30960毫秒 A019Z代表地址

 

 

【测试二】查看peoTest表查询所有列耗时情况

declare  @start  datetime, @end  datetime
set  @start = getdate()
select  *  from peotest
set  @end = getdate()
select  datediff(millisecond, @start, @end)

--查询所有列耗时为:201350毫秒

 

 

 【测试三】利用分页存储过程,查看某一页单列及所有列耗时情况。

  一个好用的分页存储过程

 

 

declare  @start  datetime, @end  datetime

 set @start=getdate() 

 

exec selectbypage  ' peoTest ', ' * ', ' A0188 ', 20, 10, 0, 0, '' 

 

set  @end = getdate() 

 

select  datediff(millisecond, @start, @end)

  --查询的所有列第10页,每页20条数据,耗时:22346毫秒

--只查询A0188列第10页,每页20条数据,耗时:12176毫秒

 

 

从以上三个测试例子,可以得出以下结论:

 

 1、尽量少使用  * 号,应只查询需要的字段,能减少不必要的消耗。 

 

 2、多使用分页,单页数据量较少,也可以提高查询效率。 先写到这里,外面这么好的天气,不去打打球,运动一下身体,真太可惜了。身体是本钱。身体是一切基础!。

 

现在是在窗户旁坐着,还是自然风吹的爽啊。

欲知后事如何,且听下回分解。。。。

看官看客们,点起你的手,轻点下方推荐。。给足动力啊,后续优化系列源源不断。

送妹子图

 

 

 

 

 

 

 

 

 

1
1
分享到:
评论
1 楼 freezingsky 2013-08-02  
整个文章,写得龙飞凤舞,虽然已经老生常谈,但文章 最后的一张图片,直接让全文的含义得到升华!
PS:那妹子,是真的吗?

相关推荐

Global site tag (gtag.js) - Google Analytics