【发布时间】:2022-07-26 09:53:12
【问题描述】:
您能否帮我优化一下这个查询:
SELECT
case when EXISTS (
SELECT
1
FROM
usergroups item_t1
WHERE
(item_t0.p_b2bunits = item_t1.p_uid)
AND (item_t1.TypePkString = 8796095217746)
) THEN true ELSE false END as active,
item_t0.p_b2bunits as code,
item_t0.p_accountname as name1,
item_t0.p_accountnameextension as name2,
case when EXISTS (
SELECT
1
FROM
user2salreprelation item_t2
WHERE
(
item_t2.SourcePK = item_t0.PK
and item_t2.TargetPK = 8828959653892
)
AND (item_t2.TypePkString = 8796150399058)
) THEN true ELSE false END as isFav
FROM
account2salesrep item_t0
WHERE
(
item_t0.p_showondashboard = 1
AND item_t0.p_district = '4'
AND (
LOWER(item_t0.p_accountname) LIKE CONCAT('%', CONCAT('crampel alu', '%'))
OR LOWER(item_t0.p_accountnameextension) LIKE CONCAT('%', CONCAT('crampel alu', '%'))
OR LOWER(item_t0.p_b2bunits) LIKE CONCAT('%', CONCAT('crampel alu', '%'))
)
)
AND (item_t0.TypePkString = 8796149842002)
order by
item_t0.p_accountname
LIMIT
0, 11;
【问题讨论】:
-
仅给出查询很难调试。我们需要看解释计划,表格描述。如果可能,请以文本格式添加数据示例和预期结果,也许查询可以用另一种更有效的方式编写
-
您真的需要
CONCAT看似静态的字符串吗? -
欢迎来到 Stack Overflow!为了帮助您解决query-optimization 的问题,我们需要查看您的表定义、索引定义和 EXPLAIN 的输出。请read this,然后edit您的问题。而且,您应该知道
LIKE '%something'带有领先的%几乎是不可能优化的。
标签: mysql performance optimization sap-commerce-cloud