如何提高数据库性能,减少数据库服务器压力瓶颈一两个小方法

树立的观念:一个SQL语句,如果在压力测试时CPU占有率达到100%,此语句肯定存在问题。

    在大多数程序员的心里,一直认为数据库加索引,在查询中使用索引,就可以提高数据库性能。其实这种观点有一点的局限性,如果不好好的利用已经建立好的数据库索引,有时反倒给数据库增加更大的处理压力。现在我们举例说明一下:

    在现有的个人信息管理系统登录处的查询中,有这么一个SQL语句:

     Select StudentInfoID, StudentNumber, StudentName,UnifyExamInfoID,NetSchoolID from StudentInfo

     where StudentCrtificateNumber ='130425831217494' and rtrim(ltrim(StudentNumber)) = 'D0462382001'

     此SQL语句的目的是查找这个考生是否存在,验证登录的效果,就是这么一个简单的SQL语句,在压力测试时,10个用户同时登录,就会造成数据库服务器 (2CPU,4G内存,IBM专用服务器)CPU占有率达到100%。而这张表也建立了StudentCrtificateNumber 和 StudentNumber 两个字段的索引, 问题出在哪呢?原因如下:

     (1)在studentinfo表中,建立了一个索引LX_STUDENTINFO,包括了四个字段,顺序为:studycenternumber,studentnumber,studentname,studentcrtificatenumber。

    (2)程序员理解的是,这个索引中包括了这两个字段,那么查询时就应该很快。实际不是。

    大家注意一点,这个LX_STUDENTINFO索引,是四个索引字段,而他们的顺序 studycenternumber,studentnumber,studentname,studentcrtificatenumber,在数据库 设计中,如果查询采用的第一个字段和第二个字段组合,则该索引有效;如果查询采用第一个、第二个和第三个字段组合,该索引也有效;而如果第一个和第三个, 或第四个组合,则该索引是无效的,等同的效果仍是在没有索引的数据库中进行查询。也就是说建立的索引中的字段,在查询使用时,不能隔字段使用。

    另外,索引中涉及到字段的顺序也会影响查询的性能,如果一个索引包含两个字段A1和A2,那么在查询时,一定要严格按索引中这两个字段的顺序设计查询,比 如:select * from a where A1='A' and A2='B'。而如果程序员写成了select * from a where A2='B' and A1='A'的话,虽然不影响程序正常使用,但会增加数据库的压力,并且查询效能会降低。

    根据这种思路,重新调整了一下这个表的索引,在这个表中增加了一个新的索引,只包括这两个字段,并且按StudentCrtificateNumber 和StudentNumber先后顺序排序。经过300人同时登录的压力测试,CPU占有率才只占2-3%,证明调整结果有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值