Mysql 使用多个CONCAT子句优化SQL语句?
层叠的concat导致查询速度非常慢,是否有任何方法可以优化此查询?事实上,这句话似乎没有达到预期的效果。。我想根据集合id是“%pages.page\u id/heading%”还是“%pages.page\u id/content%”来执行类似操作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,则此语句可以正常工作。
或
是逻辑运算符。它没有为类似于的定义备选方案。你需要把它分成两个类似于
的子句
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
;