ASP.NET开发中索引的力量

分类: asp.net技巧   出处:iocblog整理  更新时间:2008-06-06   添加到收藏  

  一直对数据库的优化一窍不通,大家谈论最多应该是怎样从 sql 查询语句和索引下手去优化。对于索引,很多高手都写过很多文章,看来看去也没悟出什么东西,不过,今天我修改了数据表的几个主键(可以认为就是聚焦索引)并且添加了一些非聚焦索引,sqlserver 的性能立刻提高了上去。

  对于 users 表,原先是把主键设置为 userid(自增字段)字段上,通过事件跟踪器,发现对于 users 表的查询比较耗费资源(可以从 cpu、reads、duration这三相值来判断),而且所有的查询基本上都是对 users 表的 name 来查询的,即 select * from users where name = 'xxx',既然where后边跟的是 name,就应该把聚焦索引设置到 name 字段上,并且 name 字段是不重复的,所以可以这样修改。修改前的耗费忘了记录了,修改之后的耗费大大降低了,cpu、reads、duration分别为0、9、0.如果where后面跟的字段是可重复的,就不能作为聚焦索引,这时可以为该字段添加非聚焦索引。

  按照这个思路来优化其他表。

  select count(*) from mark where name = 'xxx'

  优化前

  cpu / reads / duration(下同)

  15 / 1401 / 16

  32 / 1422 / 30

  31/ 1422/ 46

  优化后: 对mark表加入name以及infoid的非聚焦索引

  0 / 38 / 0[来源 www.iocblog.net]

  15 / 39 / 16

  0 / 12 / 0

  0 / 81 / 0

  0 / 37 / 30

  0 / 12 / 0

  select * from comment where infoid = '12345'

  优化前:

  0 / 644 / 0

  15 / 664 / 16

  优化后:comment表给infoid加非聚焦索引

  0 / 158 / 0

  0 / 158 / 0

  16 / 42 / 16

  0 / 42 / 0

  对所有表都经过类似的优化后,性能立刻提升了上去,cpu 从原先的 95% 左右降低到 60% 左右。由此可见,对于表的设计应该非常重视主键的选择,不要为每个表都来一个 int 类型的自增字段作为主键,另外就是跟踪数据库查询,根据具体的查询来建立非聚焦索引。

  不清楚 asp.net 到底能承受多大的页面浏览量,虽然这个问题问的太宽泛,但总体印象上,对 asp.net 的性能有所怀疑。大型 web 好像也没有几个用 asp.net 做的,dangdang 网是的,圣诞节的时候去访问,老是出现页面打不开的故障;donews 也是,不过,也是经常出现那非常熟悉的错误页面,至于 myspace,没有太多关注。

  看到关于豆瓣的一组数据,很是羡慕:一台web服务器运行 lighttpd,每天处理2500万个request,峰值每秒处理1000个request; 一台应用服务器运行python,每天处理500万pv; 数据库服务器运行mysql,负载情况没有介绍。

  对于特别注重速度的web2.0年代里,觉得 python、php、ror 这些轻量级的框架来做 web 开发将更加适合,再加上免费的 linux 平台以及 mysql数据库,最理想不过了。微软也搞了一个 mvc 框架,呵呵,是不是觉察到了一些危机了呢?


Tag: 索引



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。