0
SELECT
*

FROM
pages


INNER JOIN cms_collection ON cms_collection.collection_id LIKE 

( 
   CONCAT('%', pages.page_id, '/heading%') OR
   CONCAT('%', pages.page_id, '/content%') 
)

WHERE
site_id = 51

LIMIT 10

スタックされた CONCAT が原因でクエリが非常に遅くなりますが、これを最適化する方法はありますか? そして、実際には、このステートメントは期待どおりに機能していないようです.. collection_id が「%pages.page_id/heading%」または「%pages.page_id/content%」であるかどうかに基づいて、LIKE を実行したいと考えています。

最初の CONCAT だけが存在する場合、このステートメントは正常に機能します。

4

2 に答える 2

2

OR論理演算子です。の代替を定義しませんLIKELIKEそれを 2 つの句に分割する必要があります。

SELECT * FROM pages
INNER JOIN cms_collection ON
(cms_collection.collection_id LIKE CONCAT('%', pages.page_id, '/heading%')) OR
(cms_collection.collection_id LIKE CONCAT('%', pages.page_id, '/content%'))
WHERE site_id = 51 LIMIT 10

それでも遅い場合は、テーブル構造と an の出力をEXPLAIN質問に追加してください。

于 2013-06-11T20:37:43.907 に答える