2017-04-02 59 views
1

这是一个Amazon Aurora实例。Amazon Aurora突然使用错误索引

我有一个查询做得很好,并且使用了具有高基数的索引p_date(datetime)。

但自从最近几天以来,查询需要很长时间。我查看了Newrelic事务日志,发现使用了一个不同的索引状态(VARCHAR),它具有非常低的基数。

通过解释查询,我可以看到它使用索引交集以及另一个键也是低基数是客户端ID。

所有指数从一开始就在那里。在大多数查询中,我们在where子句中使用p_date和status。

为什么数据库想要突然使用这个索引有什么原因吗?代码中没有更改,因此SQL查询是相同的。然而,上述表格中,我从上周删除了大量的行(从3个表中的9k-15k)。他们可以成为一个原因吗?我在这些表上使用随机UUID作为主键。

我是否需要运行“分析表”或类似的东西?我应该删除该索引?不确定这是否会对性能产生影响。

我保留了数据库实例的默认数据库参数组。那里需要做什么调整?

回答

1

在一个标志上有一个索引(如status)几乎总是没用的;我看到你有一个比无用的情况更糟的情况。

摆脱INDEX(status)

添加INDEX(status, p_date)顺序,这样你也可以做一个日期范围优选。

( “指数交集” 为线索。)

ANALYZE TABLE,假设它是ENGINE=InnoDB,速度快,但很少有什么差别。

为什么“突然”?统计数据随时间而变化,主要是因为增加了数据。

+0

谢谢你。这是在最初创建模式时完成的。只有在使用其他索引时发现记录更快才能使用它,因为没有合适的选择。我现在在查询中重要的字段中添加了一些复合索引,并删除了那些无用的索引:) – James