Tip pro profesionály Nepoužívejte SELECT *
nebo SELECT table.*
v dotazech citlivých na výkon. Místo toho vyberte podle názvu sloupce, které skutečně potřebujete použít
Tip pro profesionály MySQL má notoricky známé nestandardní rozšíření na GROUP BY
které používáte a možná i zneužíváte. Přečti si tohle. https://dev.mysql.com/doc /refman/8.0/en/group-by-handling.html
Pokud jste postupovali podle prvního profesionálního tipu, bylo by mnohem snazší postupovat podle druhého.
Tip pro profesionály Vyhněte se „vhazování“ spousty jednosloupcových indexů v naději, že urychlíte vaše dotazy. Místo toho vytvořte indexy, často složené indexy, které odpovídají potřebám vašeho skutečného dotazu. Přečtěte si toto https://use-the-index-luke.com .
Tip pro profesionály Using temporary; using filesort
zobrazení ve výstupu EXPLAIN nemusí být nutně špatné. Jednoduše to znamená, že dotazovací stroj musí částečnou sadu výsledků uložit do mezipaměti, než ji vrátí. temporary
věc není skutečná tabulka, je to struktura RAM. Pokud je tak velký, že zahltí RAM, MySQL to rozlije na disk. Ale váš ne.
Vše, co bylo řečeno, refaktorujme váš dotaz. Předpokládám, že chcete načíst řádky s největší idCartDATA
hodnotu pro každý CartSplitData.SUPPLIERID
.
Napišme to tedy jako dílčí dotaz.
SELECT max(IDCartDATA) AS IDCartDATA, SUPPLIERID
FROM CartSplitData
GROUP BY SUPPLIERID
Tento dotaz lze výrazně urychlit vložením složeného indexu do CartSplitData:(SUPPLIERID, IDCartDATA)
.
Nyní přepišme váš hlavní dotaz, abyste našli řádky odpovídající ID v tomto dílčím dotazu.
SELECT CartData.* /* * hammers performance */
CartSplitData.* /* * hammers performance */
FROM CartData
JOIN CartSplitData ON CartSplitData.IDCartDATA = CartDATA.IDCartData
JOIN (
SELECT max(IDCartDATA) AS IDCartDATA, SUPPLIERID
FROM CartSplitData
GROUP BY SUPPLIERID
)x ON x.SUPPLIERID = CartSplitData.SUPPLIERID
AND x.IDCartData = CartSplitData.IDCartData
WHERE CartData.CartOrderref = 'XXXXXXXXX'
Váš index na CartData.CartOrderref
pomůže tomuto vnějšímu dotazu, stejně jako vytvořený složený index ^^^.