【问题标题】:How do I find the best index for the select query如何找到选择查询的最佳索引
【发布时间】:2017-09-20 07:38:33
【问题描述】:

如何为以下查询找到最佳索引

select msgType
     , max(loggedDate)
     , interfaceName
  from LOG_Hl7
 where direction = 'INCOMING'
 group 
    by msgType 
HAVING msgType IN ('ADT');`

当我解释

【问题讨论】:

  • 您的查询格式错误。你想要interfaceName 的值是多少?您没有通过它进行聚合,也没有围绕它的聚合函数。

标签: mysql sql indexing mariadb


【解决方案1】:

首先,将查询写成:

select msgType, max(loggedDate), interfaceName
from LOG_Hl7
where direction = 'INCOMING' and msgType = 'ADT'
group by msgType;

即过滤之前聚合,而不是之后。

那么最好的索引是LOG_H17(direction, msgType, loggedDate)。

interfaceName 只是在SELECT 子句中闲逛。 MySQL 允许这样做,但您将从与 WHERE 子句匹配的任何行中获取任意值。

【讨论】:

  • 我更正了查询,并且我需要 interfaceName 用于应用程序中的业务目的(接口名称类似于 ADT 或 RDE,可能会重复)。
【解决方案2】:

要回答标题,请参阅我的Indexing Cookbook。

要解决您的特定查询,请按照 Gordon 的建议重写查询并使用他建议的索引。还要解决悬空的interfaceName。

嗯……我的食谱中没有你的情况。从

构建索引
  1. = WHERE 的一部分:direction 和 msgType,按任意顺序
  2. 添加来自 GROUP BY 的列,如 Cookbook 所述。但是msgType 已经存在了。但它必须是最后一个(到目前为止)——Cookbook 中缺少此注释。

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2011-09-05
    • 2016-06-28
    相关资源
    最近更新 更多