我知道我必须避免使用" in“子句,但我不知道在这种情况下该怎么做。场景是这样的:我从PHP获得一个值列表,然后构造一个查询,如下所示:
SELECT id FROM
( SELECT * FROM `tips` r
LEFT JOIN (SELECT tip FROM `tips_showed` WHERE user='8') AS a ON r.id=a.tip
WHERE a.tip IS NULL ) AS t
WHERE t.id IN
('3','4','5','2','6','7','8','9','10','18',
'11','12','13','14','15','16','17','20') LIMIT 1这使得我的站点非常慢(因为每次用户访问它时都会执行它)。怎样才能让它更快呢?
发布于 2011-06-03 02:58:57
去除子选择。IN()子句完全没问题。
在AJ要求写下更正后的查询后:
SELECT `r`.`id`
FROM `tips` AS `r`
LEFT JOIN `tips_showed` AS `a`
ON (`a`.`user`='8' AND `r`.`id`=`a`.`tip`)
WHERE `r`.`id` IN ('3','4','5','2','6','7','8','9','10','18',
'11','12','13','14','15','16','17','20')
AND `a`.`tip` IS NULL
LIMIT 1上面的代码没有经过测试,可能包含一些严重的错误(临时编写)-如果您发现任何错误,请在评论中给我反馈。
加号
不要忘记添加适当的索引。
https://stackoverflow.com/questions/6219032
复制相似问题