数据库有39万条数据我在需要查询的3字段上面加了索引 mysql> SELECT * FROM `partner`.`vas_cpmt_log` where adate between '2010-07-27' and  '2010-07-28'
and serviceid = 'CPKayIVR0100T ' and cptelco = 'dtac' order by adate desc  limit 0, 100;上面的语句执行起来起来就1秒不到但是查询总记录数的时候就不行了mysql> SELECT count(*) FROM `partner`.`vas_cpmt_log` where adate between '2010-07-27' and  '2010-07-28'
and serviceid = 'CPKayIVR0100T ' and cptelco = 'dtac';下面这个语句要执行8秒有谁知道怎么样优化,在线急等

解决方案 »

  1.   

    mysql> desc vas_cpmt_log;
    +--------------+---------------+------+-----+---------+-------+
    | Field        | Type          | Null | Key | Default | Extra |
    +--------------+---------------+------+-----+---------+-------+
    | mtid         | varchar(30)   | NO   | PRI | NULL    |       |
    | adate        | datetime      | YES  | MUL | NULL    |       |
    | linkid       | varchar(50)   | YES  |     | NULL    |       |
    | telco        | char(4)       | YES  |     | NULL    |       |
    | cptelco      | varchar(10)   | YES  | MUL | NULL    |       |
    | channeltype  | varchar(10)   | YES  |     | NULL    |       |
    | serviceid    | varchar(20)   | YES  | MUL | NULL    |       |
    | srcnumber    | varchar(30)   | YES  |     | NULL    |       |
    | destnumber   | varchar(30)   | YES  |     | NULL    |       |
    | chargenumber | varchar(30)   | YES  |     | NULL    |       |
    | extendcode   | varchar(20)   | YES  |     | NULL    |       |
    | msgtype      | varchar(10)   | YES  |     | NULL    |       |
    | content      | varchar(8000) | YES  |     | NULL    |       |
    | rpt_status   | int(11)       | YES  |     | NULL    |       |
    | rpt_re   | varchar(200)  | YES  |     | NULL    |       |
    +--------------+---------------+------+-----+---------+-------+表结构  
      

  2.   

    查询时,只有where的第一个条件是被加了索引的字段时 才会启用索引, 如果需要 我可以给你份SQL优化的文档。  (Oracle的)
      

  3.   

    在 adate 和serviceid 和cptelco 上面加了索引
      

  4.   

    我写的第2个语句上面的adate 也是加了索引,但是就是没有起作用
      

  5.   

    加了索引的字段时 才会启用索引,Alter Table,看看自己设置的索引,有没有关联上,
    不知道对你有没有帮助
      

  6.   

    如果楼主特别想提高速度,这种查询sql优化不会起到太大效果吧。
    建议楼主优化数据库设置
      

  7.   

    想问得是只需要得到多少条记录 但是,在命令行下输入的SQL语句就这么慢,是语句需要优化,还是MYSql的配置需要设置,主要是分页显示的时候需要显示有多少条记录
    谢谢上面朋友的看法,知道的麻烦说下优化的思路
      

  8.   

    想显示有多少条纪录的话用select count(1) 就行了,你把数据全取出来干啥使啊试一下把read_buffer_size,read_rnd_buffer_size,sort_buffer_size调高
      

  9.   

    想显示有多少条纪录的话用select count(1) 就行了,你把数据全取出来干啥使啊试一下把read_buffer_size,read_rnd_buffer_size,sort_buffer_size调高就是HQL 不让用select count(*) 真没有办法
      

  10.   

    可以的,返回值有可能是Integer也有可能是Long在网上搜了个列子,你参考下Integer value = new Integer(((Number)db_session.createQuery("select count(log.id) from Log  log").uniqueResult()).intValue());