如何找到选择查询的最佳索引

时间:2017-04-23 17:23:04

标签: mysql sql indexing mariadb

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

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

当我做了解释时enter image description here

2 个答案:

答案 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

嗯......我的食谱中缺少你的案例。从

构建索引
  1. =部分WHEREdirectionmsgType,按任意顺序
  2. 添加来自GROUP BY的列,正如Cookbook所说。但是msgType已经存在了。但它必须是最后的(到目前为止) - 这本笔记在Cookbook中缺失。