CodeGym /Java tanfolyam /All lectures for HU purposes /Adatmintavételezési sebesség optimalizálás

Adatmintavételezési sebesség optimalizálás

All lectures for HU purposes
Szint , Lecke
Elérhető

6.1 Bevezetés

Most térjünk át az elméletről a gyakorlatra.

„Elméletileg nincs különbség elmélet és gyakorlat között. A gyakorlatban azok."

A való világban élünk, és minden szoftverterméket végső soron élő emberek számára hoznak létre. És ezeket az élő embereket nagyon idegesítik a lassan betöltődő oldalak és a lelassuló programok.

És ha egy adatbázis-lekérdezés egy másodpercnél tovább tart, ez elfogadhatatlan . A felhasználók egyszerűen nem fognak olyan terméket használni, amelynek oldalai/funkciói ilyen lassúak.

De gyakran egy oldal megjelenítéséhez több tucat lekérdezést kell végrehajtania az adatbázisban. És ha szekvenciálisan hajtódnak végre, akkor már nincs második limited, hanem mondjuk kérésenként 100 ms.

Íme az 5 legjobb módszer, amellyel a programozók felgyorsíthatják az adatbázis-lekérdezéseket:

  1. Indexek hozzáadása az adatbázisban lévő táblákhoz.
  2. Lekérdezések újraírása és optimalizálása.
  3. Engedélyezze (és konfigurálja) a gyorsítótárazást az adatbázis oldalán.
  4. Gyorsítótárazás engedélyezése a kliens oldalon.
  5. Adatbázis denormalizálás végrehajtása.

Ezeket a dolgokat nagyrészt már ismeri, ezért az alábbiak csak gyakorlati tanácsok lesznek.

6.2 Indexek

Nem titok, hogy az adatbázisokkal való munka szinte minden webhely munkájának nagy részét lefoglalja. És ez az adatbázissal való munkavégzés, amely leggyakrabban a webes alkalmazások szűk keresztmetszete.

Ebben a cikkben gyakorlati tanácsokat szeretnék adni a MySQL használatához.

Azonnal mondom:

  • ez a cikk a MySQL-ről szól, bár az általános dolgok valószínűleg minden DBMS-re igazak.
  • A cikkben leírtak az én személyes álláspontom, és nem a végső igazság.
  • A tanácsok nem úgy tesznek, mintha újak lennének, és az olvasott irodalom és a személyes tapasztalatok általánosításának eredménye.
  • a cikk keretein belül nem térek ki a MySQL konfigurációs kérdéseire.

A MySQL használatával kapcsolatos problémák a következő három csoportba oszthatók (fontossági sorrendben):

  1. Az indexekkel való visszaélés vagy azokkal való visszaélés.
  2. Hibás adatbázis-struktúra.
  3. Helytelen \ szuboptimális SQL-lekérdezések.

Nézzük meg közelebbről az egyes csoportokat.

Indexek használata

Az indexek használatának mellőzése vagy visszaélése az, ami leggyakrabban lassítja a lekérdezéseket. Azoknak, akik nem ismerik az indexek működésének mechanizmusát, vagy még nem olvastak róla a kézikönyvben, erősen ajánlom, hogy olvassák el.

Tippek az indexek használatához:

  • Nem kell mindent indexelni . Az emberek gyakran anélkül, hogy megértenék a jelentést, egyszerűen indexelik a táblázat összes mezőjét. Az indexek felgyorsítják a lekérést, de lelassítják a sorbeszúrást és a frissítést, ezért az egyes indexek kiválasztásának értelmesnek kell lennie.
  • Az indexre jellemző egyik fő paraméter a szelektivitás, vagyis az index különböző elemeinek száma. Nincs értelme olyan mezőt indexelni, amelynek két vagy három lehetséges értéke van. Nem sok haszna lesz egy ilyen indexnek.
  • Az indexek kiválasztását egy adott tábla összes lekérdezésének elemzésével kell kezdeni. Nagyon gyakran egy ilyen elemzés után három vagy négy index helyett egy összetett indexet készíthet.
  • Kompozit indexek használatakor a mezők sorrendje az indexben kritikus.
  • Ne feledkezzünk meg az indexek fedezéséről sem. Ha a lekérdezés összes adata lekérhető egy indexből, akkor a MySQL nem éri el közvetlenül a táblát. Az ilyen kéréseket nagyon gyorsan teljesítik. Például egy indexet (bejelentkezés, név) tartalmazó lekérdezéshez SELECT name FROM user WHERE login='test'nem szükséges hozzáférni a táblához. Néha célszerű egy további mezőt hozzáadni az összetett indexhez, ami az indexet fedi és felgyorsítja a lekérdezéseket.
  • Sorindexeknél gyakran elegendő a sornak csak egy részét indexelni. Ez jelentősen csökkentheti az index méretét.
  • Ha %az elején van, akkor LIKE(SELECT * FROM table WHERE field LIKE '%test')az indexek nem kerülnek felhasználásra.
  • A TELJESSZÖVEG index csak a MATCH ... AGAINST szintaxissal használható .

6.3 Az adatbázis szerkezete

A jól megtervezett adatbázis az adatbázissal való gyors és hatékony munka kulcsa. Másrészt egy rosszul megtervezett adatbázis mindig fejfájást okoz a fejlesztőknek.

Adatbázis tervezési tippek:

  1. Használja a lehető legkisebb adattípust. Minél nagyobb az adattípus, minél nagyobb a tábla, annál több lemezelérésre van szükség az adatok beszerzéséhez. Használjon egy nagyon kényelmes eljárást: SELECT * FROM table_name PROCEDURE ANALYSE();határozza meg a lehetséges minimális adattípusokat.
  2. Figyelje meg a normál formákat a tervezési szakaszban. A programozók gyakran már ebben a szakaszban a denormalizáláshoz folyamodnak. A legtöbb esetben azonban a projekt kezdetén korántsem egyértelmű, hogy ez milyen eredménnyel járhat. Egy táblázat denormalizálása sokkal könnyebb, mint egy szuboptimálisan denormalizált táblától szenvedni. És JOINnéha gyorsabban működik, mint a helytelenül denormalizált táblák.
  3. Ne használjon NULLoszlopokat, hacsak nincs rájuk tudatosan szüksége.

6.4 SQL lekérdezések.

Ugyanilyen gyakran felmerül a vágy, hogy minden lekérdezést átírjunk natív SQL-ben, hogy a lekérdezés a lehető leggyorsabb legyen. Ha úgy dönt, hogy megteszi, íme néhány tipp:

  1. Kerülje el a cikluson belüli kéréseket. Az SQL a halmazok nyelve, és a lekérdezések írását nem a függvények nyelvén, hanem a halmazok nyelvén kell megközelíteni.
  2. Kerülje *a (csillagok) használatát a lekérdezésekben. Nyugodtan sorolja fel pontosan a kiválasztott mezőket. Ez csökkenti a lekért és elküldött adatok mennyiségét. Ne feledkezzünk meg az indexek fedezéséről sem. Még ha kijelöli is a táblázat összes mezőjét, jobb, ha felsorolja őket. Először is javítja a kód olvashatóságát. Csillagok használatakor lehetetlen megtudni, hogy mely mezők vannak a táblázatban anélkül, hogy megnéznénk. Másodszor , ma a táblázatban öt INT oszlop van, és egy hónappal később egy újabb SZÖVEG és BLOB került hozzáadásra , és a csillag nem változott.
  3. Lapozáskor a rekordok teljes számának lekéréséhez használja a SQL_CALC_FOUND_ROWSés SELECT FOUND_ROWS();az When used SQL_CALC_FOUND_ROWS MySQLfüggvényt, gyorsítótárazza a kiválasztott sorszámot (a LIMIT alkalmazása előtt), és használatkor SELECT FOUND_ROWS()csak ezt a gyorsítótárazott értéket adja vissza a lekérdezés újbóli végrehajtása nélkül.
  4. Ne felejtse el, hogy INSERTtöbb beszúráshoz van szintaxis. Egy lekérdezés egy nagyságrenddel gyorsabban fut, mint több lekérdezés egy ciklusban.
  5. Használja LIMITott, ahol nincs szüksége minden adatra.
  6. Használja a kijelölés INSERT… ON DUPLICATE KEY UPDATE…helyett és INSERTután UPDATE, gyakran pedig a helyett REPLACE.
  7. Ne felejtse el ezt a csodálatos funkciót GROUP_CONCAT. Komplex kérdésekben segíthet.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION