Mysql 5

Inserarea de indici: (1 * număr de indici)

unde numerele din paranteze sunt proporționale cu timpul total. Nu se ia în considerare timpul de la începutul inserării, care este necesar pentru a deschide tabelele (tabelele se deschid o dată pentru fiecare interogare concurențială).







Dimensiunea mesei încetinește inserarea indexurilor în jurnalul N de ori (arbori B).

Unele modalități de a accelera inserția:

În cazul în care un număr mare de rânduri sunt inserate din același client în același timp, utilizați instrucțiunile INSERT într-o formă care conține mai multe înregistrări. În acest caz, inserarea se va produce mult mai repede (în unele cazuri, de mai multe ori) decât atunci când se utilizează instrucțiuni separate INSERT. Când adăugați date într-o tabelă care nu este goală, puteți seta variabila bulk_insert_buffer_size pentru ao face chiar mai rapidă. Vezi secțiunea 4.5.6.4, "EVENIMENTE VARIABILE".

Când inserați mai multe linii de la diferiți clienți, puteți crește viteza utilizând instrucțiunea INSERT DELAYED. Consultați secțiunea 6.4.3, "SINTAȚIA operatorului INSERT".

Notă: când se utilizează tabelele MyISAM, puteți introduce rânduri în timpul instrucțiunilor SELECT. dacă nu există rânduri șterse în tabele.

Când încărcați o masă dintr-un fișier text, utilizați comanda LOAD DATA INFILE. În acest caz, inserarea va apărea de obicei de 20 de ori mai rapidă decât utilizarea numărului corespunzător de instrucțiuni INSERT. Consultați secțiunea 6.4.9, "SINTAȚIE DE SARCINĂ A INFORMAȚIEI DE ÎNCĂRCARE".

Dacă tabelul are multe indexuri, puteți face unele lucrări suplimentare, astfel încât comanda LOAD DATA INFILE să funcționeze chiar mai repede. Utilizați următoarea procedură:

Dacă este necesar, creați o tabelă utilizând instrucțiunea CREATE TABLE (de exemplu, folosind mysql sau Perl-DBI).

Rulați instrucțiunea FLUSH TABLES sau comanda shell: mysqladmin flush-tables.

Utilizați myisamchk - keys-used = 0 -rq / path / to / db / tbl_name. După aceea, indexurile nu vor fi folosite pentru acest tabel.

Introduceți datele în tabel folosind LOAD DATA INFILE. În acest caz, niciun index nu va fi actualizat și, prin urmare, viteza va fi foarte mare.







Refaceți indexurile cu comanda myisamchk -r -q / path / to / db / tbl_name. Această procedură creează un arbore index în memorie înainte de a-l scrie pe disc, ceea ce este mult mai rapid prin eliminarea unui număr mare de operații pe disc. Arborele index, rezultând rezultatul, este, de asemenea, perfect echilibrat.

Rulați instrucțiunea FLUSH TABLES sau comanda shell: mysqladmin flush-tables.

Notă: comanda LOAD DATA INFILE efectuează, de asemenea, optimizarea de mai sus la introducerea într-o masă goală. Diferența principală a acestei echipe din procedura de mai sus este că, cu myisamchk poate aloca mult mai multă memorie temporară pentru crearea de index decât MySQL, în opinia dumneavoastră, ar trebui să fie alocate fiecăreia dintre indici recreand. Deoarece MySQL 4.0 poate utiliza și ALTER TABLE tbl_name TASTELE DISABLE loc myisamchk --keys-utilizat = 0 -rq / calea / catre / db / tbl_name și ALTER TABLE tbl_name ENABLE KEYS în loc myisamchk -r -q / calea / catre / db / tbl_name. În acest fel, puteți, de asemenea, săriți pașii TABLURI FLUX.

Puteți accelera operațiile de inserare efectuate de mai mulți operatori prin setarea blocărilor de tabelă:

Factorul principal care afectează viteza este că tamponul index este doar spălat pe disc o dată, după ce toate instrucțiunile INSERT sunt finalizate. În mod tipic, conținutul tampoanelor index va fi redus la disc ori de câte ori există diferite instrucțiuni INSERT. Blocarea nu este necesară dacă puteți introduce toate rândurile cu un singur operator. Pentru tabelele tranzacționale, pentru a mări viteza, trebuie să utilizați BEGIN / COMMIT în loc de TABLURI DE BLOCARE. Blocarea va reduce, de asemenea, timpul complet al testelor cu mai multe conexiuni, însă latența maximă pentru unele fire va crește (deoarece se așteaptă să se deblocheze). De exemplu:

În cazul în care nu este utilizat de blocare, 2, 3 și 4 se va finaliza execuție înainte de 1 și 5. În cazul în care se utilizează dispozitivul de blocare, 2, 3 și 4 se pare că nu a terminat de execuție înainte de 1 sau 5, dar timpul total ar trebui să scadă cu aproximativ 40 %. Deoarece în operațiunea MySQL INSERT. UPDATE și DELETE sunt foarte rapid, performanța generală va fi îmbunătățită dacă adăugați blocare la toate comenzile, face mai mult de 5 inserturi sau actualizări într-un rând. Dacă faci o mulțime de rânduri de inserții pot uneori insoti echipa LOCK TABLES comanda DESCĂTUȘEAZĂ TABELE (după fiecare 1000 de linii) pentru a permite altor fire de acces la masa. Rezultatul din toate acestea va fi obtinerea de performanță bună. Desigur, comanda LOAD DATA INFILE este mult mai rapidă pentru încărcarea datelor.

Pentru a mări și mai mult viteza setărilor LOAD DATA INFILE și INSERT. crește tamponul cheie. Vezi secțiunea 5.5.2, "Configurarea setărilor serverului".







Articole similare

Trimiteți-le prietenilor: