Használja ki a MySQL erejét a fejlett parancsokkal - Buzut
Egy korábbi cikkünkben láttuk, hogyan kezelhető a MySQL a parancssorból. Megtanultuk, hogyan kell táblákat és adatbázisokat létrehozni, módosítani, törölni. Ezekben a táblázatokban azt is láttuk, hogyan kell adatokat olvasni, írni, törölni és rendezni. Ezek a műveletek alkotják az SQL adatbázisokban elvégzendő munka nagy részét.

Néha azonban összetett adatokat kell kezelnünk, amelyek szervezése szélesebb körű feldolgozást igényel. Ezért indexről, elsődleges kulcsokról, idegen kulcsokról vagy FULLTEXT keresésekről fogunk beszélni. Olyan sok módszer, amely segít összetett adatsémák rendszerezésében és kezelésében.
Oszlopindex
Az indexeket a lekérdezések felgyorsítására használják, és elengedhetetlenek a kulcsok létrehozásához, amelyeket később látni fogunk. Index létrehozásakor az SQL motor ezt az indexet külön adatstruktúrában tárolja. Ez az adatstruktúra kifejezetten ezekhez az adatokhoz rendezett értékeket tartalmaz. Ily módon az SQL motor nagyon hatékonyan képes megtalálni a keresett adatokat.
Az indexek tehát lehetővé teszik a keresési feltételeket használó lekérdezések felgyorsítását, mint például a WHERE .
Másrészt az indexek helyet foglalnak a memóriában, és lassítják az INSERT és az UPDATE frissítését, mivel minden alkalommal meg kell írnia az indexet. Ezután bölcsen meg kell választani az oszlopokat az oszlopok indexeléséhez és kiváltságához, amelyeken gyakran keres például.
Mielőtt belevágna az indexek részleteibe és létrehozná azokat, tudnia kell, hogy természetesen meg lehet jeleníteni:
Ebben a tekintetben lehetséges, hogy több oszlopra indexeljünk egyidejűleg, és akkor is használhatjuk ezt az indexet, ha nem végezünk keresést az összes indexelt oszlopon. Ezt balról mutató mutatónak hívják.
Tagtáblája van:
- vezetéknév
- keresztnév
- ál
Mindháromra indexet készít egyszerre. Az index rendezi a vezetéknevet, majd a keresztnevet, majd a becenevet. Tehát, ha csak neveken szeretne keresni, akkor a sorrend pontosan megegyezik azzal, mintha csak a nevekre készítettünk volna indexet.
Hasonlóképpen, ha a vezetéknévre és az utónévre keresünk, a sorrend továbbra sem mozog a két oszlop indexéhez képest. Másrészt, ha csak álnéven vagy csak keresztnéven akarunk keresni, az nem fog működni.
Valójában a beceneveket az őket megelőző kereszt- és utónévek rendezik a bal oldali oszlopokban, mielőtt ők maguk ábécé sorrendbe kerülnének. Ezért hívják "balról", mindaddig működik, amíg az összes bal oldali oszlopban keresgél. Ellenkező esetben létre kell hoznia egy másik indexet.
Többféle INDEX
EGYEDI
Ahogy a neve is sugallja, gondoskodik arról, hogy a táblázatban csak egy érték szerepelhessen. Például ezt az indexet használjuk az ELSŐKULCSBAN .
TELJES SZÖVEG
Ez az index lehetővé teszi a szöveges tartalmak hatékony keresését. Ez a típusú index csak a TEXT, CHAR és VARCHAR típusú mezőkön működik (különben már nem szöveg!). Majd meglátjuk, mit enged megtenni.
Megjegyzés: A FULLTEXT-vel nem lehet használni az „index balra” technikát. Ezenkívül ez az index csak a myisam motorral érhető el.
TÉRBELI
Ez az index egy kicsit specifikus, mivel térbeli adatokra vonatkozik. Ha további információra van szüksége, RTFM;)
Indexek létrehozása
Indexeket is létrehozhat közvetlenül az oszlopokban. Használjon KEY vagy UNIQUE szót, ha egyedi indexet szeretne. Ez a szintaxis korlátozottabb, mivel egyszerre csak egy oszlopban definiálhat indexeket, és nem adhat meg méretkorlátot az indexben (például egy karakter első karaktere x).
Hozzáadás táblázat létrehozása után
Néha nem gondolunk azonnal mindenre, és indexet szeretnénk hozzáadni egy már létező táblához. ALTER TABLE tudja ?
Van egy másik parancs, amely ugyanezt teszi: CREATE INDEX .
Személy szerint kevésbé szeretem ezt a módot, mert emlékeznie kell egy további parancsra, amikor az ALTER TABLE nagyon jól csinálja. Ezenkívül később látni fogja, hogy a CREATE INDEX kevesebb dolgot engedélyez, mint az ALTER TABLE, például az index törlését:
Könnyű, nem igaz ?!
Beszúrás vagy frissítés
Az egyedi indexek megakadályozzák az ismétlődő adatok beszúrását. Ilyen beillesztési kísérlet esetén hiba lép fel. Ugyanakkor új lehetőséget nyitnak meg: UPSERT, az UPDATE vagy az INSERT megértése .
Ez a parancs csak akkor teszi lehetővé az adatok beszúrását, ha még nem léteznek. Ellenkező esetben választhatja a semmittevést vagy az adatok frissítését.
A következő példákban feltételezzük, hogy van egy egyedi index a telefonon .
Ebben a példában semmi sem változik, csak kerüljük a hiba eldobását. Valójában meghatározzuk, hogy duplikált érték esetén a rekord azonosítója megegyezik az azonosítóval, ezért nem történik módosítás.
Természetesen definiálhatunk értékeket a módosításhoz.
Itt, ha az érték nem létezik, létrejön, de ha létezik, akkor a telefon és a vezetéknév oszlopok frissülnek az általunk választott értékekkel.
Végül dinamikusan végezheti el a frissítéseket. Ez a VALUE kulcsszóval történik (VALUES a MariaDB 10.3.3 előtt). Ennél a kulcsszónál a VALUE (oszlop) értéke megegyezik azzal az értékkel, amelyet beillesztettek volna. Másrészt, ha megadja az oszlop = oszlop értéket, akkor ez az aktuális érték. Az első példához hasonlóan ez a lehetőség lehetővé teszi egy kifejezés definiálását az UPDATE után .
Ezúttal, ha a telefonszám már létezik, akkor egyszerűen frissítjük a név és a vezetéknév nevét.
FULLTEXT kutatás
A FULLTEXT nagyon hatékony a kutatás szempontjából. Szavakra vágja a húrokat, hogy egyesével elemezze őket. A szó egy szóköz nélküli karaktersorozat (ó ?!) Vagy két szó, amelyeket aláhúzással „_” vagy aposztróf választ el. A kötőjelekkel elválasztott összetett szavakat két külön szónak tekintjük.
Ezenkívül a FULLTEXT e kutatás elvégzéséhez a következő szabályokat veszi figyelembe:
- a sorok 50% -ában megjelenő szót figyelmen kívül hagyják (relevánsak),
- a négy betűnél rövidebb szót figyelmen kívül hagyják,
- a túl gyakori angol szavakat figyelmen kívül hagyják. Francia vagy, nincs szerencséd! De mégis meg lehet határozni a figyelmen kívül hagyandó szavakat.
A FULLTEXT keresés így történik:
A FULLTEXT kereséseknek 3 típusa van:
- A TERMÉSZETES NYELV MÓDBAN keresés. Ez az alapértelmezett.
- BOOLEAN MODE kutatásban. Ez a keresés figyelmen kívül hagyja a fent tárgyalt 50% -os szabályt, és lehetővé teszi az indexelés nélküli oszlopok keresését (azonban ügyeljen a végrehajtási időre!). Az utolsó pont logikai üzemmóddal nincs relevancia szerinti rendezés az eredményekben.
- A LEKérdezés kiterjesztésével keresés. Ez kiterjedt kutatás. Ez a típusú keresés valójában két keresést hajt végre egy lekérdezésben. Először elküldi a keresett karakterláncot egy NATURAL keresésnek, majd elindít egy másodikat paraméterekkel, már nem a keresett karakterlánccal, hanem az első keresés eredményeivel. Ezért ez egy kiterjedt keresés.
A keresés típusának megadása:
Meg fogja érteni, hogy a FULLTEXT indexek nagy érdeklődésre tartanak számot, ha az asztalon kereséseket végeznek. Sajnos ez a fajta index csak a MyISAM táblákban található meg. És később meglátja, hogy az InnoDB sok olyan erősséggel rendelkezik, mint a MyISAM. Röviden: választanunk kell.