Mysql 5

Indexek beillesztése: (1 * indexszám)

ahol a zárójelben lévő számok arányosak a teljes idővel. Nem veszi figyelembe a beillesztés kezdetének idejét, ami szükséges a táblázatok megnyitásához (a táblázatokat minden egyes versengő lekérdezésnél egyszer megnyitják).







A táblázat mérete lassítja az indexek beillesztését N naplóba (B-fák).

A beszúrás felgyorsításának néhány módja:

Ha ugyanazon ügyfélből ugyanakkora sorba sorolt ​​sorokat helyezel be, használja az INSERT utasításokat olyan formában, amely sok rekordot tartalmaz. Ebben az esetben a beillesztés sokkal gyorsabb (egyes esetekben többször is) fordul elő, mint amikor külön INSERT utasításokat használ. Amikor adatot ad hozzá egy nem üres táblához, beállíthatja a bulk_insert_buffer_size változót, hogy még gyorsabb legyen. Lásd: 4.5.6.4. Szakasz, "SHOW VARIABLES".

Amikor különböző sorokat helyez el különböző ügyfelekből, növelheti a sebességet az INSERT DELAYED utasítással. Lásd a 6.4.3. Szakasz "INSERT Operator Syntax." Szakaszát.

Megjegyzés: a MyISAM táblák használatakor sorokat helyezhet el a SELECT utasítások alatt. ha nincsenek törölt sorok a táblázatokban.

Amikor betölt egy táblázatot egy szövegfájlból, használja a LOAD DATA INFILE parancsot. Ebben az esetben a beillesztés általában 20-szor gyorsabb, mint a megfelelő számú INSERT utasítás használata. Lásd: 6.4.9. Szakasz, "LOAD DATA INFILE Operator Syntax".

Ha az asztalnak sok indexje van, további munkákat végezhet el, hogy a LOAD DATA INFILE parancs még gyorsabb legyen. Használja a következő eljárást:

Ha szükséges, hozzon létre egy táblázatot a CREATE TABLE utasítással (például mysql vagy Perl-DBI használatával).

Futtassa a FLUSH TABLES utasítást vagy a shell parancsot: mysqladmin flush-tables.

Használja a myisamchk - billentyűket - használt = 0 -rq / path / to / db / tbl_name. Ezután az indexek nem használatosak erre a táblára.

Helyezze az adatokat a táblázatba a LOAD DATA INFILE segítségével. Ebben az esetben nincsenek indexek frissítve, következésképpen a sebesség nagyon magas lesz.







Indítsa újra az indexeket a myisamchk -r -q / path / to / db / tbl_name paranccsal. Ez az eljárás létrehoz egy indexfát a memóriában, mielőtt lemezre írná, ami sokkal gyorsabb, ha nagyszámú lemezműveletet távolít el. Az eredményt eredményező indexfa tökéletesen kiegyensúlyozott.

Futtassa a FLUSH TABLES utasítást vagy a shell parancsot: mysqladmin flush-tables.

Megjegyzés: A parancs LOAD DATA INFILE is végez a fent említett optimalizálás helyezve egy üres asztalhoz. A fő különbség a csapat a fenti eljárás lényege, hogy a myisamchk lehet kiosztani sokkal ideiglenes memória az index létrehozását, mint a MySQL, az Ön véleménye, kell elosztani az egyes felüdítő indexek. Mivel MySQL 4.0 is használhatja az ALTER TABLE tbl_name DISABLE KEYS helyett myisamchk --keys-használt = 0 -rq / útvonal / / db / tbl_name és ALTER TABLE tbl_name ENABLE gombok helyett myisamchk -r -q / path / to / db / tbl_name. Ilyen módon kihagyhatja a FLUSH TABLES lépéseket is.

Az asztalzár beállításával gyorsíthatja a több operátor által végrehajtott beillesztési műveleteket:

A sebességet befolyásoló legfontosabb tényező az, hogy az index puffert egyszerre csak a lemezre kell öblíteni, miután minden INSERT utasítás befejeződött. Általában az index pufferek tartalmát ugyanúgy kell lemásolni a lemezre, mint sok különböző INSERT utasítás. A zár nem szükséges, ha egyetlen sorozathoz beillesztheti az összes sort. Tranzakciós táblák esetén a sebesség növeléséhez a BEGIN / COMMIT értéket kell használnod a LOCK TABLES helyett. A blokkolás csökkenti a többszörös kapcsolódási tesztek teljes idejét is, de egyes szálaknál a maximális késleltetés növekedni fog (mert várhatóan feloldódik). Például:

Ha a lakat nem használt, 2, 3 és 4 befejezi végrehajtása előtt az 1. és 5. Ha a zár használják, 2., 3. és 4. nyilvánvalóan nem fejezte végrehajtás előtt 1 vagy 5, de a teljes időt csökkenteni kell körülbelül 40 %. Mert a MySQL műveletben INSERT. UPDATE és DELETE nagyon gyors, az általános teljesítmény javul, ha a bővítmény zár minden parancsot, ezzel több, mint 5 betét vagy frissítéseket a sorban. Ha sokat sorok lapkák időnként kísérő csapat LOCK TABLES parancs UNLOCK táblázatok (miután minden 1000 sor), hogy más szálak elérheti az asztalra. Mindennek eredménye lesz a jó teljesítmény. Természetesen a LOAD DATA INFILE parancs sokkal gyorsabb az adatok betöltéséhez.

A LOAD DATA INFILE és INSERT parancsok tovább növelése. növeli a kulcspufferét. Lásd: 5.5.2. Szakasz, "Szerverbeállítások beállítása".




Kapcsolódó cikkek