表结构和数据大体如下;
id userid title num_click    updated
 1 11     文章1   100       1272519012
 2 12     文章2   200       1272519012
 3 13     文章3   300       1272519012
 4 13     文章4   400       1272519012其中数据量是十万级别的。我想读出点击量前十的文章标题和内容如:select title,num_click,content from article order by num_click limit 10;但是我给num_click加了索引仍然是全表扫描

解决方案 »

  1.   

    explain select title,num_click,content from article order by num_click limit 10;show index from article ;贴出来看一下。
      

  2.   

    >我想读出点击量前十的文章标题和内容你的表结构还有SQL没看到什么内容阿
      

  3.   


    我没有建索引,因为我怎么建索引,他都是全表扫描下边是我的具体的表
    CREATE TABLE IF NOT EXISTS `article` (
      `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id号',
      `userid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '发起人id号',  
      `title` varchar(150) NOT NULL COMMENT '话题标题',
      `num_click` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '点击数',
      `content` text  NOT NULL  COMMENT '内容',
      `updated` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '时间',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='文章表' AUTO_INCREMENT=561700 这事explain 
    id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
    1  SIMPLE  article  ALL  NULL  NULL  NULL  NULL  2  Using filesort
      

  4.   

    我见了索引后用索引的嘛。
    不过过程比较奇怪,一开始explain也没有索引,后来加了个WHERE num_click > 0,就索引了。
    怀疑是不是cache的问题。
    explain SELECT SQL_NO_CACHE ...BTW order by num_click DESC
      

  5.   

    +----+-------------+---------+-------+---------------+---------+---------+------+------+-------+
    | id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows | Extra |
    +----+-------------+---------+-------+---------------+---------+---------+------+------+-------+
    |  1 | SIMPLE      | article | index | NULL          | Index_2 | 2       | NULL |   10 |       |
    +----+-------------+---------+-------+---------------+---------+---------+------+------+-------+
      

  6.   


    加了个WHERE num_click > 0会用索引,但是还会全表扫描的,因为所有的记录的num_click 都大于 0,还是不能优化这个sql语句
      

  7.   

    我现在纠结的就是5F贴出的explain结果,是
    select title,num_click,content from article order by num_click DESC limit 10;
    我的数据库也造了十几万条记录,content里面也有内容,不过比较断短而已。
      

  8.   

    没有索引,当然只能是全表扫描。建个索引后再试,再贴出你的explain 和 show index
      

  9.   

    创建基于 num_click 的索引。
      

  10.   

    还是不行的 id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
    1  SIMPLE  article  ALL  NULL  NULL  NULL  NULL  2  Using filesort
    索引情况:Table  Non_unique  Key_name  Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null  Index_type  Comment
    article  0  PRIMARY  1  id  A  2  NULL  NULL     BTREE   
    article  1  num_click  1  num_click  A  2  NULL  NULL     BTREE   
      

  11.   

    您可以这样试一试,建立一个(`num_click`,`id`)的复合索引,按照下面的SQL检索就能使用部分索引,速度可能也要快一些!ALTER TABLE `article`
      ADD INDEX `num_click` (`num_click`,`id`);
    explain select title,num_click,content from (select id from article order by num_click desc limit 10) as rs join article on rs.id=article.id order by num_click desc;
      

  12.   

    老兄,你表中才两条记录! MYSQL当然不会走什么索引啊!!!!
      

  13.   


    我插入了10万条数据,索引了下,就ok了,谢谢
    id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
    1  SIMPLE  article  index  NULL  num_click  5  NULL  10