Jóváhagyta a legjobb orosz programozók

Ha a SELECT előzi kulcsszó megmagyarázni. MySQL jelentett SELECT műveletet hajtunk végre. és adjon tájékoztatást az eljárás és az eljárás összekapcsolásának a táblázatokban.

A rendszer segítségével a magyarázó, akkor kitaláljuk, mikor biztosítson index táblázat, hogy a gyorsabb kiválasztását, használja az indexet, hogy megtalálja rekordokat. Ezen felül, akkor láthatja, mennyire sikeresek az eljárás kötelező érvényű asztalra került kiválasztásra optimalizáló által. Kényszeríteni az optimalizáló összekapcsolni táblázatok egy bizonyos sorrendben, akkor az utasításokat STRAIGHT_JOIN.

Bonyolult kapcsolatok MAGYARÁZZA visszatér egy sor információt az egyes felhasznált SELECT táblákat. A táblázatok szerepel a sorrendben, amelyben olvasni. MySQL végzi összekötő egy menetben (a módszer az úgynevezett „single-söprés több csatlakozzanak”). Ez úgy történik, mint: MySQL olvas egy sort a táblázat első, megtalálja a megfelelő sort a második táblázat, majd - a harmadik, és így tovább. Ha a feldolgozás befejeződött az összes asztal, MySQL kiadja a kiválasztott oszlopok és átadja fordított sorrendben a lista táblákat, amíg nem lesz megtalálható egy táblázatot a legmagasabb véletlen vonalak. A következő sor olvasható az asztaltól, és a folyamat folytatódik a következő táblázatban.

EXPLAIN parancs kimenete a következő oszlopokat tartalmazza:

Az alábbiakban felsoroljuk a különböző kötési sorrendjét, az a legjobb, hogy a legrosszabb:

A következő példa bemutatja, hogyan kell optimalizálni fokozatosan REGISZTRÁCIÓ információk felhasználásával kimenet az üzemeltető megmagyarázni.

Tegyük fel, hogy az általunk nyújtott be a SELECT alább. amelyet meg kell vizsgálni a segítségével EXPLAIN parancsot.

Ebben a példában azt feltételezzük, hogy:

  • Összehasonlítva oszlopok nyilvánították az alábbiak szerint:

CUSTNMBR (elsődleges kulcs)

  • Tt.ActualPC értékek nem egyenletesen oszlik el.
  • A kezdeti szakaszban, még mielőtt bármi optimalizálás, magyarázza utasítás megjeleníti a következő információkat:

    Mivel minden egyes tábla típus az összes. A fenti kimenet jelzi, hogy a MySQL csinál egy teljes kötési összes táblát! Ez hosszú időt vesz igénybe, mivel a végrehajtás a kötési kell tekinteni a termék a sorok számát minden asztalra! A mi esetünkben egy ilyen termék - 74 * 2135 * 74 * 3872 = 45.268.558.720 sorokat. Ha a táblák nagy, nehéz még elképzelni is, hogy meddig fognak fordulni.

    Az egyik probléma az, hogy a MySQL nem (még), hogy hatékonyan alkalmazzák indexek oszlopait, ha bejelentették őket másképpen. Ebben az összefüggésben a VARCHAR és CHAR típus típus - ugyanaz, ha bejelentették őket különböző hosszúságban. Mivel tt.ActualPC oszlopot nyilvánították a CHAR (10). és et.EMPLOYID - mint CHAR (15). ellentmondás van hosszúságú értékeket.

    A probléma megoldásához ellentmondás hosszai közötti oszlopok kell használni ALTER TABLE parancs hosszabbításának ActualPC oszlopon 10 szimbólumok 15 szimbólumok:

    Most mind az oszlop, és tt.ActualPC et.EMPLOYID típusúak VARCHAR (15). Az ismételt végrehajtását MAGYARÁZZA nyilatkozat jelenik meg a következő eredménnyel:

    Nem tökéletes, de sokkal jobb (a termék a sorok értékei most csökkent 74-szor). Ezt a kötődést végre egy pár másodpercig.

    Tudod, hogy egy másik változás -, hogy megszüntesse az eltérés a oszlophosszait összehasonlítások tt.AssignedPC = et_1.EMPLOYID és tt.ClientID = do.CUSTNMBR.

    Magyarázzuk nyilatkozat jelenik meg a következő információkat:

    Ez majdnem tökéletes.

    Volt egy másik probléma. Ez azon a tényen alapul, hogy a MySQL feltételezi alapértelmezés szerint, hogy az oszlopban lévő értékeket tt.ActualPC egyenletesen oszlik el, de a táblázatban tt nem ez a helyzet. Szerencsére, MySQL tájékoztatja erről a nagyon egyszerű lehet:

    Most kötő tökéletes, és magyarázza utasítás megjeleníti a következő eredménnyel:

    Megjegyzés: sorok oszlop a kimenet a MAGYARÁZZA nyilatkozata - kísérleti feltételezés optimalizáló MySQL kapcsolatok. Ahhoz, hogy optimalizálja a lekérdezést, akkor ellenőrizni kell, hogy a szám közel a valósághoz. Ha nem, akkor jobb teljesítmény a SELECT kapcsolatban STRAIGHT_JOIN és próbálja ki egy másik sorrendben a táblázatok a FROM záradék.

    MySQL.RU. Jóváhagyta a legjobb orosz programozók
  • Kapcsolódó cikkek