您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/5/18 8:45:31发布33次查看
树立的观念:一个sql语句,如果在压力测试时cpu占有率达到100%,此语句肯定存在问题。 在大多数程序员的心里,一直认为数据库加索引,在查询中使用索引,就可以提高数据库性能。其实这种观点有一点的局限性,如果不好好的利用已经建立好的数据库索引,有时反
树立的观念:一个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 awhere a2='b' and a1='a'的话,虽然不影响程序正常使用,但会增加数据库的压力,并且查询效能会降低。
   根据这种思路,重新调整了一下这个表的索引,在这个表中增加了一个新的索引,只包括这两个字段,并且按studentcrtificatenumber和studentnumber先后顺序排序。经过300人同时登录的压力测试,cpu占有率才只占2-3%,证明调整结果有效。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product