如何找到选择查询的最佳索引
Posted
技术标签:
【中文标题】如何找到选择查询的最佳索引【英文标题】: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
的值是多少?您没有通过它进行聚合,也没有围绕它的聚合函数。
【参考方案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
。
嗯……我的食谱中没有你的情况。从
构建索引=
WHERE
的一部分:direction
和 msgType
,按任意顺序
添加来自 GROUP BY
的列,如 Cookbook 所述。但是msgType
已经存在了。但它必须是最后一个(到目前为止)——Cookbook 中缺少此注释。
【讨论】:
以上是关于如何找到选择查询的最佳索引的主要内容,如果未能解决你的问题,请参考以下文章