如何找到以下查询的最佳索引
select msgType
, max(loggedDate)
, interfaceName
from LOG_Hl7
where direction = 'INCOMING'
group
by msgType
HAVING msgType IN ('ADT');`
答案 0 :(得分: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
子句的任何行中获得任意值。
答案 1 :(得分:1)
要回答标题,请参阅我的Indexing Cookbook。
要解决您的特定查询,请按照Gordon的建议重写查询并使用他建议的索引。还要解决悬空interfaceName
。
嗯......我的食谱中缺少你的案例。从
构建索引=
部分WHERE
:direction
和msgType
,按任意顺序GROUP BY
的列,正如Cookbook所说。但是msgType
已经存在了。但它必须是最后的(到目前为止) - 这本笔记在Cookbook中缺失。