Mysql - "按顺序排序"使用" CONCAT"

时间:2017-10-13 19:14:41

标签: mysql concatenation sql-order-by

我一直在寻找一个"为什么"对此。 在这个查询中我试图显示结果,但之前我比较了一个表的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

1 个答案:

答案 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 

然后从该表中执行匹配和订购。