提高 mysql count 速度

xiabibo 发布于 2011/10/18 15:26
阅读 2K+
收藏 0

 select
        count(*)
    from
        ctc_sms_ent this_ 
    where
       this_.nstat=0 
        and this_.timeMillis>=0
        and this_.timeMillis<9999999999999

用的是long型的索引timeMillis,加了划线部分后,速读慢了8秒

加载中
0
老程
老程

不是很懂优化,平时单表最大的数据量也就几百万,都是定期结存到汇总表后备份清理,所以数据永远不会超过千万。

select
        count()
    from
        ctc_sms_ent this_ 
    where
       this_.nstat=0 
        and this_.timeMillis>=0

        and this_.timeMillis<9999999999999

仅对最后的条件加了括号,再试试看。

老程
老程
@虫☌☌☌兒☌ : 我一般用count(0),不清楚是否对性能有影响。
xiabibo
xiabibo
@老程 : 不好意思,是count(*)
老程
老程
OMG,count(0)括号里面的东西怎么没了?@红薯 @Roddy
0
xiabibo
xiabibo

引用来自“老程”的答案

不是很懂优化,平时单表最大的数据量也就几百万,都是定期结存到汇总表后备份清理,所以数据永远不会超过千万。

select
        count()
    from
        ctc_sms_ent this_ 
    where
       this_.nstat=0 
        and this_.timeMillis>=0

        and this_.timeMillis<9999999999999

仅对最后的条件加了括号,再试试看。

一样额,啊,你们百万的数据,count(*)多久呢

0
老程
老程

目前3011746,我远程查询用时

1.375 sec

老程
老程
再次查询用时: 0.047 sec
0
xiabibo
xiabibo

引用来自“老程”的答案

目前3011746,我远程查询用时

1.375 sec

查询条件一样吗,用的innodb 还是myisam(这个很快),我用的innodb的,不过去掉划线部分速度还行
0
老程
老程
innodb 
0
xiabibo
xiabibo

引用来自“老程”的答案

innodb 
查询条件你换个复杂的看看
0
老程
老程

我加了类似于你的条件,符合条件的有75W多数据,性能基本也没变化。

 

0
老程
老程
考虑在相关字段添加索引看看吧。
xiabibo
xiabibo
show table status; 你看看是不是innodb
0
xiabibo
xiabibo

引用来自“老程”的答案

考虑在相关字段添加索引看看吧。
这个不考虑了,这张表的插入速度已经很慢了。那你用个没有建索引的字段查查,把你like的那个字段换换,如果还是很快的话,我怀疑你的是不是innodb,如果真是,那就是配置文件可以优化了。
0
老程
老程

确实是innodb的。like换成=,查询结果很少,查询耗时几乎无变化。

返回顶部
顶部