能说说你的大致的表结构索引情况,查询的SQL,让大家看看,尽量以索引列为条件做查询,但象'%%'之类的like也没法使用索引的。

解决方案 »

  1.   

    +---------+------------------+------+-----+---------+----------------+
    | Field   | Type             | Null | Key | Default | Extra          |
    +---------+------------------+------+-----+---------+----------------+
    | id      | int(5)           |      | PRI | NULL    | auto_increment |
    | ip      | varchar(15)      | YES  |     | NULL    |                |
    | dt      | datetime         | YES  | MUL | NULL    |                |
    | control | varchar(10)      | YES  |     | NULL    |                |
    | host    | varchar(40)      | YES  | MUL | NULL    |                |
    | url     | text             | YES  |     | NULL    |                |
    | code    | char(3)          | YES  |     | NULL    |                |
    | length  | int(10) unsigned | YES  |     | NULL    |                |
    +---------+------------------+------+-----+---------+----------------+$sql = "select count(host) as count,host 
    from test group by host 
    order by count desc";
    结构和语句都在这里了,其实就算不是这样,我直接select * from test order by dt desc 也是很慢
      

  2.   

    重复值比较多的字段上建立索引也不怎么合适,在数据库量比较大的情况下,又要按照一个无索引字段统计并排序,速度慢也是没办法的事,毕竟要做那么多的运算,但实际上我觉得这种完全把所有数据查出来其意义并不大,那么多的数据,我们实际看的也就那么一点,所以可以用limit (offset),limitvalue ;来减少查询结果的行数,如果是在应用程序中,你完全可以这样一次查询比如20条,这样速度应该是比较快的,这也就是分页处理问题,既能提高速度,又避免了客户机的大量内存被占用,就是在客户端中你查上几百条也就够了,你实际要看的恐怕是很少的。查询方面可以从以下几个基本原则考虑:
    1.减少所读的行数
    2.避免排序
    3.减少所须排序的行数
    4.用简单的关键字排序
      

  3.   

    其实我已经limit了,在后面,哎,功能现在就是不想减少,没办法啊,如果还保持现在的形式,大伙有什么好建议吗?
      

  4.   

    除了索引等等优化手段,我想可能你要增加内存,增大mysql的缓存了
    如果你有1G内存专门给mysql用,我想速度应该有一定改善!
      

  5.   

    SHOW CREATE TABLE test ;
    建议加 host 单独一个索引
    dt 单独一个索引
      

  6.   

    用哪种格式存的?InnoDB查询速度比较慢,MyISAM查询速度最快。