求教mysql查询超慢
-
SQL code
CREATE TABLE IF NOT EXISTS `ceshi` ( `id` int(10) NOT NULL AUTO_INCREMENT, `link` varchar(255) DEFAULT NULL COMMENT '源文地址', `title` varchar(255) DEFAULT NULL COMMENT '标题', `description` text, `create_time` varchar(255) DEFAULT NULL COMMENT '发布时间', `addtime` varchar(255) DEFAULT NULL COMMENT '收录时间', `source` varchar(255) DEFAULT NULL COMMENT '来源', `keyword` varchar(255) DEFAULT NULL COMMENT '关键字', `tonality` varchar(255) DEFAULT NULL, `focus` varchar(255) DEFAULT NULL, `brand` varchar(255) DEFAULT NULL, `item_id` int(10) NOT NULL DEFAULT '2', `create_user` varchar(100) NOT NULL, `pub_time` varchar(100) NOT NULL, `modify_time` varchar(100) NOT NULL, `media` varchar(100) NOT NULL, `is_deal` varchar(20) NOT NULL, PRIMARY KEY (`id`), KEY `title` (`title`), KEY `item_id` (`item_id`), KEY `source` (`source`), KEY `keyword` (`keyword`), KEY `title_2` (`item_id`,`title`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=41904 ;
以上是创建表。
现在表里面有35112条数据。
用如下sql语句
-
SQL code
SELECT * FROM `cj` WHERE item_id = '2' AND title like'%4岁小孩子的心声%' LIMIT 0,20
查询时间6.086470s
用如下sql语句
-
SQL code
SELECT * FROM `cj` WHERE item_id = '2' AND title like'%4岁小孩子的心声%' order by title LIMIT 0,20
查询时间260.024610s
大家帮帮忙?这是为啥啊?
我也加索引了呀?
为什么会这么慢?
你看一下执行计划, title 列的索引没有用到,因为like是不是用索引的。
不使用索引,还排序了,肯定会慢。
你使用了 like’%4岁小孩子的心声%’ 导致无法使用索引。 只有KEY `item_id` (`item_id`),被使用了,而相同的item_id = ‘2’估计很多记录。
你分析下业务,在title like’%爱4岁小孩子的心声%’这一处想办法,把他改成title like’4岁小孩子的心声%’,这样就能用到索引了。
另外你的表都是大字段,varcahr(255)的,不建议查询时用*,需要哪个字段取哪个字段,慷慨在这时候是有害的。