2017-04-02 27 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