Mysql 使用多个CONCAT子句优化SQL语句?

Mysql 使用多个CONCAT子句优化SQL语句?,mysql,sql,Mysql,Sql,层叠的concat导致查询速度非常慢,是否有任何方法可以优化此查询?事实上,这句话似乎没有达到预期的效果。。我想根据集合id是“%pages.page\u id/heading%”还是“%pages.page\u id/content%”来执行类似操作 如果只存在第一个CONCAT,则此语句可以正常工作。或是逻辑运算符。它没有为类似于的定义备选方案。你需要把它分成两个类似于的子句 SELECT * FROM pages INNER JOIN cms_collection ON cms_co

层叠的concat导致查询速度非常慢,是否有任何方法可以优化此查询?事实上,这句话似乎没有达到预期的效果。。我想根据集合id是“%pages.page\u id/heading%”还是“%pages.page\u id/content%”来执行类似操作


如果只存在第一个CONCAT,则此语句可以正常工作。

是逻辑运算符。它没有为类似于的
定义备选方案。你需要把它分成两个类似于
的子句

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
如果仍然很慢,请将表结构和
解释的输出添加到问题中

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

使用UNION ALL代替OR提高性能

我无法想象这比在WHERE子句中使用OR更快。
SELECT * FROM pages
INNER JOIN cms_collection ON
(cms_collection.collection_id LIKE CONCAT('%', pages.page_id, '/heading%'))
WHERE site_id = 51

UNION ALL

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