Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL wyłącza i włącza klawisze

Zdecydowanie musisz wybrać swoje podejście w oparciu o typ silnika... optymalizacja dla MyISAM lub dla InnoDB .

Niedawno przeprowadziliśmy test porównawczy porównujący różne sposoby wstawiania danych i mierzyliśmy czas od przed wstawieniem do pełnego przywrócenia wszystkich indeksów. Znajdował się na pustym stole, ale wykorzystaliśmy do 10 milionów wierszy.

MyISAM z LOAD DATA INFILE i ALTER TABLE ... ENABLE/DISABLE KEYS zwyciężył w naszym teście (w systemie Windows 7, MySQL 5.5.27 – teraz próbujemy go w systemie Linux).

ENABLE i DISABLE KEYS nie działają dla InnoDB, to tylko MyISAM. W przypadku InnoDB użyj SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; jeśli jesteś pewien, że Twoje dane nie zawierają duplikatów (nie zapomnij ustawić ich na 1 po zakończeniu przesyłania).

Myślę, że nie potrzebujesz OPTIMIZE TABLE po wstawieniu zbiorczym — wiersze MySQL są uporządkowane według wstawiania, a indeks i tak jest odbudowywany. Nie ma „dodatkowej fragmentacji” przy wstawianiu zbiorczym.

Zapraszam do komentowania, jeśli popełniłem błędy rzeczowe.

AKTUALIZACJA: Zgodnie z naszymi nowszymi i pełnymi wynikami testów, rada dotycząca klawiszy WYŁĄCZ / WŁĄCZ jest błędna.

Współpracownik zlecił programowi wykonanie wielu różnych testów - tabelę z wstępnie wypełnioną i pustą tabelą InnoDB / MyISAM, szybkościami selekcji i wstawiania z LOAD DATA LOCAL , INSERT INTO , REPLACE INTO i UPDATE , na „gęstych” i „pofragmentowanych” tabelach (nie jestem do końca pewien jak, myślę, że było to zgodne z DELETE FROM ... ORDER BY RAND() LIMIT ... ze stałym ziarnem, więc nadal jest porównywalny) oraz włączonymi i wyłączonymi indeksami.

Przetestowaliśmy go z wieloma różnymi wersjami MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) w systemach Windows i Linux (jednak nie są to te same wersje w obu systemach operacyjnych). MyISAM wygrał tylko wtedy, gdy stół był pusty. InnoDB był szybszy, gdy dane były już obecne i ogólnie działał lepiej (z wyjątkiem przestrzeni hdd - MyISAM jest mniejszy na dysku).

Jednak aby naprawdę z niego skorzystać, trzeba to samemu przetestować – z różnymi wersjami, różnymi ustawieniami konfiguracji i dużą cierpliwością – zwłaszcza w odniesieniu do dziwnych niespójności (5.0.97 był dużo szybszy niż 5.5.27 z tą samą konfiguracją – my wciąż szukam przyczyny). To, co znaleźliśmy, to że DISABLE KEYS i ENABLE KEYS są prawie bezwartościowe, a czasem szkodliwe, jeśli nie zaczynasz od pustego stołu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy to naprawdę długa ankieta?

  2. Jak sprawdzić, czy tabela MySQL jest UTF-8 i ma storageEngine InnoDB?

  3. Chart.js - Pobieranie danych z bazy danych za pomocą mysql i php

  4. Modelowanie bazy danych dla słabego podmiotu

  5. Podstawy kluczy obcych w MySQL?