idegen kulcs megszorítások
Jelenleg InnoDB - az elsődleges tárolási alrendszer MySQL, amely támogatja a külföldi kulcsok, hogy azok, akiknek szükségük van rá, a választás korlátozódik 1. A cég MySQL AB megígérte, hogy egyszer saját szerver támogatja a külföldi kulcsok módon nem függ a tároló alrendszer de a belátható jövőben, InnoDB az egyetlen nagy alrendszereket, amelyekben ez a funkció végrehajtását. Ezért fogjuk vizsgálni.
Az idegen kulcsok nem kerül szabad. Általános szabály, hogy a jelenlétük azt jelenti, hogy a szerver kell keresni egy másik asztalnál, amikor változtatni bizonyos adatokat. Bár a gyorsulás művelet InnoDB erőt épít egy indexet, nem szünteti meg az összes negatív következményei az ilyen ellenőrzéseket. Az is lehet, hogy egy nagyon nagy index, amelynek nagyon alacsony szelektivitás. Tegyük fel például, hogy egy hatalmas tábla állapot oszlopban és követeli, hogy ez csak tartalmazza a helyes értékeket, és minden e három. Az ehhez szükséges kiegészítő index jelentősen növeli a teljes mérete az asztalon - még ha nagyon kicsi, és a mérete az oszlop, különösen, ha nagy hossza az elsődleges kulcs; míg maga az index nem szükséges semmi más, mint megnézni az idegen kulcs.
És mégis, bizonyos esetekben, az idegen kulcsokat javíthatja a teljesítményt. Ha fontos, hogy az adatok a két kapcsolódó táblázatokban következetes, a tényleges költség teszt szerver, és nem megy az alkalmazás szintjén. Az idegen kulcsok is hasznosak lépcsőzetes törlés és frissítés, bár ezeket a műveleteket végzik soronként, azaz lassabb, mint egy kérés, hogy frissítse több asztal vagy szakaszos eljárással.
Mivel a külföldi kulcs kérés „terjed” a többi asztal, ami azt jelenti, a felvétel a zárak. Például, amikor próbál beszúrni egy sort alárendelt tábla idegen kulcs megszorítás erőt InnoDB csekket a megfelelő értéket az elsődleges táblában. Meg kell határozni a zárat a fő vonal a tábla, hogy senki el kell hagyni, amíg a tranzakció befejeződik. Ez ahhoz vezethet, hogy egy váratlan zár várakozás, és még a holtpontok az asztalra, amelyek nem közvetlenül foglalkoznak. Ezek a problémák messze ösztönösen nyilvánvaló, és nagyon nehéz megoldani.
Néha, ahelyett, idegen kulcsok, akkor ravaszt. Folyamatokra, mint a lépcsőzetes frissítések, idegen kulcsok gyorsabb ravaszt, de ha az egyetlen célja a legfontosabb - ellenőrizze kényszer, mint a példában egy oszlopot a status, lehetséges, hogy egy hatékonyan levelet ravaszt, hogy tartalmazzanak kifejezett listáját az érvényes értékek (de akkor csak használja ENUM adattípus).
Sokszor van értelme, hogy ellenőrizze a korlátozásokat az alkalmazás, és nem használható fel erre a célra, az idegen kulcsokat.