zoukankan      html  css  js  c++  java
  • 记优化数据库的经历

    一:针对where 条件 order by 字段 优化 (2014-10-22)

      问题:只要加上order by 速度就很慢

      介绍:

      一个文章表,大小有1.6G,表结构是

      id(主键递增)   nid(小说书id)  vid(小说章节id)  content(小说内容)  time(时间)

      业务要求:搜索出每本小说的前12个最新章节

      sql: 

       Select id,name,content From table where nid=1024 order by time desc limit 12
      优化经历:
      原本表中对nid这个字段加个索引,时间快了一点,但是只要使用order by就顿时慢了,所以就要想办法优化order by
      对这块的优化,最好是使用联合索引,针对nid和time
      ALTER TABLE table ADD INDEX nid_time_index(nid,time);
      速度明显上升,问题解决
    二:针对联合查询join order by  limit优化(2014-10-23)
         问题:表中400w+数据,left join联合查询,如果加上order by 后,速度慢很多
         原始sql:
              select * from t_people p left join t_team t on p.team_id=t.id order by p.pname limit 10;
         优化:
              先搜索再limit出最少的数据,10条数据,再去联合查询,还可以继续在order by 的字段上添加索引并指定desc 或者 asc
               create  index  pnameindex  on  t_people (pname asc)
               select * from (select * from t_people p order by p.pname limit 10) p left join t_team t on p.team_id=t.id limit 10; 
         参考:http://blog.csdn.net/xiao__gui/article/details/8616224
    总结:
        针对以上两个优化经历,可以得出结论是" mysql数据库是先搜索后排序 ",这样时间就消耗的多了,因此优化就是先筛选出需要的数据,再去排序
     
     三:
        1.谨慎使用TEXT/BLOB类型
          当列类型是TEXT或者BLOB时,我们应该特别注意,因为当选择的字段有 text/blob 类型的时候,无法创建内存表,只能创建硬盘临时表,而硬盘临时表的性能比内存表的性能差,所以如果非要使用TEXT/BLOB类型,应该单独建表,不要把TEXT/BLOB类型与核心属性混合在一张表中
       2.慎用子查询
          几乎所有子查询都可以改写为连接查询,有时候,连接查询的效率要比子查询高,所以把子查询改写成连接查询是一个不错的注意。如果一条使用子查询的select语句执行时间过长,那么就应该尝试把它改写为连接查询,看他是不是执行的更好。 
         select * from emp where ename in (select ename from ename);     
         select emp.* from emp inner join ename on emp.ename=ename.ename;
       3.在DISTINCT列上增加索引
       4.在group by后面增加order by null
        在使用group by分组查询时,默认分组后,还会排序,可能会降低速度。如果不需要排序,那么可以在group by后面增加order by null,这样可以避免分组后排序
     
     
     
     
     
     
     
  • 相关阅读:
    字符串、组合练习
    national flag
    常用的Linux操作
    大数据概述
    LL(1)文法
    简单有穷自动机
    简单C语言文法
    词法分析
    编译原理 141
    综合练习
  • 原文地址:https://www.cnblogs.com/hanyouchun/p/4043707.html
Copyright © 2011-2022 走看看