like和id能否优化SELECT *
FROM `dede_aticle`
WHERE `title` LIKE '美女得到'(查询花费 0.0477 秒)EXPLAIN SELECT *
FROM `dede_aticle`
WHERE `title` LIKE '美女得到' 
id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
1  SIMPLE  dede_aticle  ALL  NULL  NULL  NULL  NULL  96052  Using whereSELECT *
FROM `dede_aticle`
WHERE id >=10000
AND `title` LIKE '美女得到' (查询花费 0.5548 秒)EXPLAIN SELECT *
FROM `dede_aticle`
WHERE id >=10000
AND `title` LIKE '美女得到' id  select_type  table  type  possible_keys  key  key_len  ref  rows  Extra
1  SIMPLE  dede_aticle  ALL  PRIMARY  NULL  NULL  NULL  96052  Using where
我有一个问题就是为什么加上 id >=10000 时间反而多了如果我一定要用到id >=10000  能优化吗
如果可以请写sql
谢谢

解决方案 »

  1.   

    贴出你的SHOW INDEX FROM dede_aticle另外同一语句多试两下,以得到平均的执行效率。注意缓存的影响。
      

  2.   

    Table  Non_unique  Key_name  Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null  Index_type  Comment
    dede_aticle  0  PRIMARY  1  id  A  96052  NULL  NULL     BTREE   
    dede_aticle  0  url  1  url  A  96052  NULL  NULL     BTREE   
    dede_aticle  1  categoryid  1  categoryid  A  345  NULL  NULL     BTREE   
    dede_aticle  1  flag  1  flag  A  2  NULL  NULL     BTREE   
      

  3.   

    表结构
    CREATE TABLE `dede_aticle` (
      `id` int(11) NOT NULL auto_increment,
      `categoryid` int(11) NOT NULL COMMENT '文章分类id',
      `categoryname` varchar(50) NOT NULL COMMENT '文章分类名字',
      `title` varchar(200) NOT NULL COMMENT '文章标题',
      `datetime` int(11) NOT NULL COMMENT '发表时间time()',
      `url` varchar(255) NOT NULL COMMENT '采集地址',
      `flag` tinyint(1) NOT NULL default '1' COMMENT '1未全文索引2已全文索引',
      PRIMARY KEY  (`id`),
      UNIQUE KEY `url` (`url`),
      KEY `categoryid` (`categoryid`),
      KEY `flag` (`flag`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=99719 ;
      

  4.   

    用连表来操作;一个是原始表,一个是用select id from tb where id>1000的表,让他们的ID进行关联得出结果.
      

  5.   

    create index idx_title on dede_aticle(title);
      

  6.   

    我的本意是因为%关键字% 很慢
    所以加上一个id>某一个id开始没想到好像还是全扫描mr_mablevi 能写一下sql语句吗
      

  7.   

    你一共96052 条记录,也就是会有96052-10000会符合  id >=10000的条件,这样,MYSQL自然不会再去利用这个索引。还不如直接全表扫描。
      

  8.   

    你没有用limit,然后就两侧查询的结果就是查询整张表,而第二种多了一个where条件,就在整表上多加了一层判断,我感觉应该是在>10000两边的数据量,有关。我感觉写条件的时候应该把最容易匹配通过的放到前面
      

  9.   

    结贴了吧----------------------------------
    php资源 医学考研网