SELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick
FROM
tgw_weibo a
NNER JOIN tgw_userinfor b
on a.userid != 0 AND a.userid= b.userid WHERE b.platformid = 1 AND a.platformid =1 AND a.weibo like '%1%' LIMIT 0,5
------解决方案-------------------- like '%1%':这种形式无法使用索引 在tgw_weibo、tgw_userinfor :建立userid、platformid 复合索引
------解决方案-------------------- show index from tgw_weibo show index from tgw_userinfor
explain SELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick
FROM
tgw_weibo a NNER JOIN tgw_userinfor b
on a.userid != 0 AND a.userid= b.userid WHERE b.platformid = 1 AND a.platformid =1 AND a.weibo like '%1%' LIMIT 0,5 贴出来以供分析。
------解决方案-------------------- 估计是a.weibo like '%1%'这个慢了,无法使用索引,weibo内容是什么
------解决方案-------------------- #8楼 图不方便分析,建议直接贴文本结果。
------解决方案-------------------- create index xxxx on tgw_weibo (userid,platformid);
------解决方案-------------------- create index xxxx on tgw_weibo (userid,platformid); 这个语句的结果是什么? 有一样的并不影响创建索引啊? 你又不是要创建唯一索引,只是个普通索引而已。
------解决方案-------------------- 你两个表的记录各有多少?
------解决方案--------------------
------解决方案-------------------- 去掉AND a.weibo like '%1%' LIMIT 0,5 要17秒多 160万多条记录 不去掉要多长时间
a.weibo like '%1%'->在weibo上建立复合索引 修改成这样: a.weibo like '1%' union a.weibo like '%1'
------解决方案--------------------
------解决方案-------------------- 测试了一下,确实是这样,a.weibo like '%1%'无法优化
------解决方案-------------------- 在ORACle中我一般用以下方法: 1、表分区,并行查询 2、模拟全文索引,做一下结构化索引优化 3、尽可能插入更多的其他限制条件减少遍历WEIBO的记录次数
------解决方案-------------------- MYISAM或者INNODB只是在存储上不同,对你的语句来说,是一样的。仍然是 like '%1%'
对于这种 %1% 是无法进行优化的。建议你把优化的关注点放在其它连接字段上。
------解决方案-------------------- 试试这个语句。 SELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick