2011-08-26 128 views
1

反正是有優化以下查詢:MySQL的相關子查詢SUM()ORDER BY

SELECT 
    t1.id, 
    (SELECT SUM(col1) FROM table_name_two t2 WHERE t2.name LIKE CONCAT('%',t1.name)) AS col1_count 
FROM 
    table_name_one t1 
ORDER BY 
    col1_count DESC 

使用ORDER BY col1_count DESC需要很長的時間。

謝謝。

+1

子查詢非常緩慢,我不會推薦他們。你可以加入這些表嗎? –

+0

你的通配符匹配會殺死你。字符串前面的通配符無法使用任何索引,因此它將進行表掃描以查找每一個匹配項。除非您重新設計數據以將字符串的匹配部分放在前面,否則無法修復它。 – dkretz

+1

@BookOfZeus:「SubQueries非常慢」---我永遠不會這樣說。有些情況下子查詢比聯接更好。 – zerkms

回答

2

只是要與加入的on子句中你比較正常的加入:

SELECT 
    t1.id, 
    SUM(t2.col1) AS col1_count 
FROM table_name_one t1 
LEFT JOIN table_name_two t2 on t2.name LIKE CONCAT('%', t1.name) 
GROUP BY 1 
ORDER BY 2 DESC 

應該方式更快這種方式 - 它基本上是一個查詢,而不是「n」的查詢,但它贏得了」 t使用LIKE運營商使用LIKE運營商獲得任何幫助%