zoukankan      html  css  js  c++  java
  • 对mysql联合索引中的字段进行合理排序

    在MySQL的where条件中,有时会用到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提高搜索速度;

    但是对联合索引中字段顺序的合理排序,便更能提高速度

    例子:select * from table where (groupid=1000) and (userid=500) and (time=140012345)

    建立的索引也通常很随性的就按照where条件中字段的顺序建立 

    ALTER  TABLE  table  ADD  INDEX g_u_time_index(groupid,userid,time);

    那么MySQL就会先检索到groupid=1000的所有数据,假如搜到了1000条,再在检索到的1000条数据中再检索userid=500的数据,假设还剩余300条,再在300条中搜索time=140012345的数据,假设就剩了100条;这样总共搜索了1000+300+100=1400条数据才找到符合的100条

    但是为了更好的优化,我们现在需要在建立索引前,对这几个字段进行计算,计算他们在表中所占的比例

    可以写一个select语句来查看:计算各个条件在表中所占的比例大小

    select count(*) total,sum(groupid=1000) gtotal,sum(userid=500)  utotal,sum(time=1400123456) time  from table;

    total  10000

    gtotal  1000

    utotal  300

    time    800

    可见如果先搜索岛userid=500的数据就可以剔除掉一大半,只剩下300条符合的,再在300中搜索符合time=1400123456和groupid=1000的数据,这样就大大缩减了查询次数;

    按照从小到大的顺序排列,可以减少搜索次数

    sql改为:select * from table where  (userid=500) and (time=140012345) and (groupid=1000) 

    ALTER  TABLE  table  ADD  INDEX g_u_time_index ( userid , time , groupid)

    参考:《高性能MySQL》第五章创建高性能索引

  • 相关阅读:
    Codeigniter 控制器的继承问题
    laravel 安装
    js preventDefault() 方法
    jquery 获取$("#id").text()里面的值 需要进行去空格去换行符操作
    HDU_1394_线段树
    Codeforces_723_D
    Codeforces_723_C
    Codeforces_723_B
    Codeforces_723_A
    HDU_4456_二维树状数组
  • 原文地址:https://www.cnblogs.com/hanyouchun/p/4046957.html
Copyright © 2011-2022 走看看