关于模糊查询 like 的优化,求高手解答SQL codeSELECT a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.ad
关于模糊查询 like 的优化,求高手解答
SQL code
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
FROM tgw_weibo a INNER JOIN tgw_userinfor b on a.userid= b.userid where b.userid != 0 and b.platformid = 1 and a.platformid =1 AND a.weibo like '%1%' [解决办法] 300万,才3秒,楼主高啊 我们公司系统查4万条记录的表要,10秒中, 请问楼主是怎么做到的?? 求指教~~
[解决办法] 试试先过滤呢 select a.id,a.userid,a.weibo,a.sina_uid,a.sina_nick,a.addtime,a.avatarUrl,b.nickname as nick from (select id, userid, weibo, sina_uid, sina_nick, addtime, avatarurl from tgw_weibo where platformid =1 and userid != 0) a, inner join (select userid, nickname from tgw_weibo where platformid =1 and userid != 0) b on a.userid = b.userid where a.weibo like '%1%' limit 0,5