2011-05-26 81 views
0
SELECT cm.course_id, xu.full_path, xu.file_name, xu.file_id, xu.virtual_server 
FROM cms_doc.xyf_urls xu 
LEFT JOIN bb_bb60.course_main cm ON xu.full_path LIKE '/courses/' || 
cm.course_id OR xu.full_path LIKE '/courses/' || cm.course_id || '%' 
WHERE xu.full_path NOT LIKE '/orgs%' 
AND xu.full_path NOT LIKE '/institution%' 
AND xu.full_path NOT LIKE '/library%' 
AND xu.full_path NOT LIKE '/internal%' 
AND xu.full_path NOT LIKE '/user%' 
ORDER BY cm.course_id 
+0

這不是Objective-C,那就是SQL。 – BoltClock 2011-05-26 10:19:11

+1

首先,如果您還不知道,請了解如何獲取查詢的解釋計劃... – Karl 2011-05-26 10:23:30

+1

您是否有full_path字段的索引? – maks 2011-05-26 10:27:18

回答

2

這是緩慢的,因爲所有的一切LIKE S的,尤其是在JOIN的一部分。

+3

甚至更​​多,所以不喜歡。 – Karl 2011-05-26 10:22:36

+1

是的,但我想真正的緩慢是由於'OR'和'ON'子句中的部分'LIKE'造成的。 – 2011-05-26 10:38:49

+0

同意。這是我以前從未見過的。我會把它放在答案中。 – YXD 2011-05-26 10:40:38

0

首先,確保xu.full_path上有索引。

其次,兩個OR條件之一似乎是多餘的。嘗試使用這個:

SELECT cm.course_id, xu.full_path, xu.file_name, xu.file_id, xu.virtual_server 
FROM cms_doc.xyf_urls xu 
    LEFT JOIN bb_bb60.course_main cm 
    ON xu.full_path LIKE '/courses/' || cm.course_id || '%' 
WHERE xu.full_path NOT LIKE '/orgs%' 
    AND xu.full_path NOT LIKE '/institution%' 
    AND xu.full_path NOT LIKE '/library%' 
    AND xu.full_path NOT LIKE '/internal%' 
    AND xu.full_path NOT LIKE '/user%' 
ORDER BY cm.course_id 
相關問題