Mysql使用“CONCAT”时“Order by”不起作用
我一直在寻找原因。 在这个查询中,我试图显示结果,但之前我对一个表的URL字段和另一个表的URL字段进行了比较,我使用CONCAT,因为URL不完全相同,但当我尝试添加Order by时。。。该语句需要很长时间才能响应,直到服务器切断我的连接Mysql使用“CONCAT”时“Order by”不起作用,mysql,concatenation,sql-order-by,Mysql,Concatenation,Sql Order By,我一直在寻找原因。 在这个查询中,我试图显示结果,但之前我对一个表的URL字段和另一个表的URL字段进行了比较,我使用CONCAT,因为URL不完全相同,但当我尝试添加Order by时。。。该语句需要很长时间才能响应,直到服务器切断我的连接 SELECT id, url, title MATCH(title, tags, category) AGAINST('white dogs') as score FROM Items LEFT JOIN Deleted_Items ON Deleted
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
使用CONCAT的连接条件是不可搜索的,因此在计算上本质上是低效的。也许可以通过将数据持久化到一个临时表来帮助它
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
然后从该表执行匹配和排序。您需要在select上引用该表,否则它将被解释为重复,并将一直搜索到超时。我通过将表名添加到每列进行了测试,但结果是相同的项*