zoukankan      html  css  js  c++  java
  • 索引的力量

    一直对数据库的优化一窍不通,大家谈论最多应该是怎样从 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
    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 框架,呵呵,是不是觉察到了一些危机了呢?

  • 相关阅读:
    一种开源的分布式消息系统Nats
    资产盘点:除了金钱,一个人还有哪些资产?
    博客首页规则改版公告
    <html>
    欢迎使用CSDN-markdown编辑器
    java 小程序查看器 启动:未初始化小程序 解决方法
    Hadoop2.6.0版本号MapReudce演示样例之WordCount(一)
    深入学习IOZone【转】
    i.MX6UL -- PWM用户空间使用方法【转】
    linux PWM蜂鸣器移植以及驱动程序分析【转】
  • 原文地址:https://www.cnblogs.com/caca/p/1047780.html
Copyright © 2011-2022 走看看