2017-10-13 106 views
0

我一直在尋找一個「爲什麼」這個。 在這個查詢中,我試圖顯示結果,但之前我比較了一個表的URL字段和另一個表的URL字段(我使用CONCAT,因爲這些URL不完全相同),但是當我嘗試添加「按...排序」該聲明需要很長時間才能響應,直到服務器切斷我的連接。Mysql - 「排序方式」不能使用「CONCAT」

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

你需要引用你選擇的表格,否則它會解釋爲重複,並將永遠搜索,直到超時 –

+0

我做了測試,將表的名稱添加到每列,但結果是相同的(項目。 *) – Kokox

回答

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 

然後執行匹配並從該表中訂購。