Rychle MySQL dotazu dostane velmi pomalý při přidávání SOUČET

0

Otázka

Mám tento dotaz, běží na AWS Aurora, v MySQL režimu, a to je velmi rychlý (100ms):

select rv.kind, rv.sub_kind, count(*)
from revenues rv
where rv.paid_at = '2021-11-17'
group by rv.kind, rv.sub_kind;

Nicméně, když jsem přidat částku, dostane VELMI pomalu (1 minuta a 20 sekund):

select rv.kind, rv.sub_kind, count(*), sum(iugu_fee_cents)
from revenues rv
where rv.paid_at = '2021-11-17'
group by rv.kind, rv.sub_kind;

Jeho jednoduchý dotaz, a mám composite index, který zahrnuje paid_at, kind, and sub_kind, v tomto pořadí. Pomocí EXPLAIN na oba dotazy potvrdit index je používán.

Další info je stejný pro oba dotazy, s výjimkou Extra sloupec, který ukazuje, Using where; Using index pro rychlý dotaz, a Using index condition v pomalé dotazu.

Je tam něco, co můžu udělat, aby tento problém vyřešit?

1

Nejlepší odpověď

0

Index, který již máte (paid_at, kind, sub_kind) je velmi dobrý v hledání a výběru řádků.

Tento index zahrnuje všechny informace, první dotaz musí vrátit výsledky, ale ne všechny informace druhý dotaz potřeb. Proto, druhý dotaz vyžaduje provést "sekundární index seek" na stole. To je běžné v indexu-založené motory.

Obecně platí, že to není velký problém, pokud potřebujete velmi vysoký výkon, nebo pokud si vyberete masivní počet řádků.

Potřebujete-li dotaz rychleji, můžete se pokusit nahradit, že index s krycí index. Krycí index nebude trpět "sekundární index seek" problém a měl by být rychlejší.

V tomto případě byste měli vytvořit index:

create index ix1 on revenues (paid_at, kind, sub_kind, iugu_fee_cents);
2021-11-20 21:51:22

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................