我一直在寻找一个"为什么"对此。 在这个查询中我试图显示结果,但之前我比较了一个表的URL字段和另一个表的URL字段(我使用CONCAT因为URL不完全相同)但是当我尝试添加&时#34;按...排序"语句需要很长时间才能响应,直到服务器切断我的连接。
SELECT id, url, title MATCH(title, tags, category) AGAINST('white dogs') as score
FROM Items
LEFT JOIN Deleted_Items
ON Deleted_Items.url LIKE CONCAT(Items.url , '%')
WHERE Deleted_Items.url IS NULL
AND MATCH(title, tags, category) AGAINST('white dogs' IN BOOLEAN MODE)
ORDER BY score DESC
LIMIT 30
答案 0 :(得分:1)
使用CONCAT()的连接条件不是sargable
,因此本身效率低,加上计算排序。也许通过将数据保存到临时表来帮助它,例如
INSERT INTO some_temp_tbl_name (id, url, title, tags, category)
SELECT i.id, i.url, i.title, i.tags, i.category
FROM Items i
LEFT JOIN Deleted_Items d ON d.url LIKE CONCAT(i.url , '%')
WHERE d.url IS NULL
然后从该表中执行匹配和订购。