一直对数据库的优化一窍不通大家谈论最多应该是怎样从 SQL 查询语句和索引下手去优化对于索引很多高手都写过很多文章看来看去也没悟出什么东西不过今天我修改了数据表的几个主键(可以认为就是聚焦索引)并且添加了一些非聚焦索引SQLServer 的性能立刻提高了上去
对于 Users 表原先是把主键设置为 UserID(自增字段)字段上通过事件跟蹤器发现对于 Users 表的查询比较耗费资源(可以从 CPUReadsDuration这三相值来判断)而且所有的查询基本上都是对 Users 表的 name 来查询的即 SELECT * FROM users WHERE name = xxx既然WHERE后边跟的是 name就应该把聚焦索引设置到 name 字段上并且 name 字段是不重复的所以可以这样修改修改前的耗费忘了记录了修改之后的耗费大大降低了CPUReadsDuration分别为如果WHERE后面跟的字段是可重复的就不能作为聚焦索引这时可以为该字段添加非聚焦索引
按照这个思路来优化其他表
select count(*) from mark where name = xxx
优化前
CPU / Reads / Duration(下同)
/ /
/ /
/ /
优化后 对mark表加入name以及infoid的非聚焦索引
/ /
/ /
/ /
/ /
/ /
/ /
select * from comment where infoid =
优化前
/ /
/ /
优化后comment表给infoid加非聚焦索引
/ /
/ /
/ /
/ /
对所有表都经过类似的优化后性能立刻提升了上去CPU 从原先的 % 左右降低到 % 左右由此可见对于表的设计应该非常重视主键的选择不要为每个表都来一个 int 类型的自增字段作为主键另外就是跟蹤数据库查询根据具体的查询来建立非聚焦索引
不清楚 ASPNET 到底能承受多大的页面浏览量虽然这个问题问的太宽泛但总体印象上对 ASPNET 的性能有所怀疑大型 Web 好像也没有几个用 ASPNET 做的dangdang 网是的圣诞节的时候去访问老是出现页面打不开的故障DoNews 也是不过也是经常出现那非常熟悉的错误页面至于 MySpace没有太多关注
看到关于豆瓣的一组数据很是羡慕一台Web服务器运行 Lighttpd每天处理万个request峰值每秒处理个request 一台应用服务器运行Python每天处理万PV 数据库服务器运行MySQL负载情况没有介绍
对于特别注重速度的web年代里觉得 PythonPHPROR 这些轻量级的框架来做 Web 开发将更加适合再加上免费的 Linux 平台以及 MySQL数据库最理想不过了微软也搞了一个 MVC 框架呵呵是不是觉察到了一些危机了呢?