首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化MySQL查询性能

问优化MySQL查询性能
EN

Stack Overflow用户
提问于 2022-07-25 12:20:11
回答 1查看 49关注 0票数 0

请您为我优化这个查询:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2022-07-26 01:53:12

输入如果TypePkString是一个VARCHAR,那么您必须引用8796150399058,否则性能将非常糟糕。(相反的情况并不重要。)

真/假布尔表达式(如EXISTS(...))返回0表示false和1 true,因此

代码语言:javascript
复制
CASE WHEN (...) THEN true ELSE false AS ...

可以简化

代码语言:javascript
复制
(...) AS ...

这些索引中的一些可能会有所帮助:

代码语言:javascript
复制
item_t0:  INDEX(p_showondashboard, p_district, TypePkString, p_accountname)
item_t1:  INDEX(p_uid, TypePkString)
item_t2:  INDEX(SourcePK, TargetPK, TypePkString)

不必要的低假设p_accountname有一个以_ci结尾的排序规则--请提供SHOW CREATE TABLE,您可以将LOWER()删除为不必要和缓慢。

和带有主导通配符(%)的一样,不需要索引。您是否考虑过使用全文(如果用户输入"words",而不是随机字符串)。它将涉及

代码语言:javascript
复制
FULLTEXT(p_accountname, p_accountnameextension, p_accountnameextension)

MATCH(p_accountname, p_accountnameextension, p_accountnameextension)
      AGAINST('+crampel alu' IN BOOLEAN MODE)

crampel alu是列名吗?前缀?还有别的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73109130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档