【问题标题】:How to index mysql table with custom field select如何使用自定义字段选择索引 mysql 表
【发布时间】:2017-09-12 09:58:05
【问题描述】:

如何根据给定的查询索引 mysql 表?

  SELECT 
      IF(
        flag IN ('A', 'B') 
        AND status IN ('on'),
        'A',
        flag
      ) AS customized_flag,
      IF(
        agent_group = 'A',
        'group_1',
        'group_2'
      ) AS group,
      COUNT(*) AS total 
    FROM
      mytable
    WHERE type IN (1, 2, 3, 4, 5) 
      AND publish = 1 
      AND status IN ('on', 'deleted', 'expired',) 
    GROUP BY customized_flag,
      agency_package_status ;

标志可以是A,B,C,D

agent_group 可以是 A,B,C,D

类型是任意整数

我的示例表数据如下所示

【问题讨论】:

  • 您的查询无效,因为group if 表达式不是聚合但您使用的是GROUP BY。在我的脑海中,为WHERE 子句中的列添加索引。

标签: mysql indexing query-optimization


【解决方案1】:

改成

GROUP BY customized_flag, `group`

添加

INDEX(publish, type, status)

【讨论】:

    【解决方案2】:

    查询是有效的 提问者正在尝试找出在此查询中的自定义字段上添加索引的方法,customized_flag 不作为表中的字段存在...但在查询中他创建以获得所需的结果...

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2015-04-28
      • 2015-04-21
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多