Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL деактивиране и активиране на ключове

Определено трябва да изберете своя подход въз основа на типа на двигателя... оптимизиране на за MyISAM или за InnoDB .

Наскоро проведохме бенчмарк, сравняващ различни начини за вмъкване на данни и измервахме времето от преди вмъкването и до пълното възстановяване на всички индекси. Беше на празна маса, но използвахме до 10 милиона реда.

MyISAM с LOAD DATA INFILE и ALTER TABLE ... ENABLE/DISABLE KEYS печели ръце в нашия тест (на система Windows 7, MySQL 5.5.27 - сега го изпробваме на система Linux).

ENABLE и DISABLE KEYS не работи за InnoDB, това е само MyISAM. За InnoDB използвайте SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; ако сте сигурни, че вашите данни не съдържат дубликати (не забравяйте да ги зададете на 1 след като качването приключи).

Не мисля, че имате нужда от OPTIMIZE TABLE след групово вмъкване - MySQL редовете се подреждат чрез вмъкване и индексът така или иначе се възстановява. Няма „допълнителна фрагментация“ чрез групово вмъкване.

Чувствайте се свободни да коментирате, ако съм допуснал фактически грешки.

АКТУАЛИЗИРАНЕ: Според нашите по-скорошни и пълни резултати от теста, съветът за ИЗКЛЮЧВАНЕ/АКТИВИРАНЕ на клавишите е грешен.

Един колега имаше програма, която изпълни множество различни тестове - таблица с предварително попълнена и празна InnoDB / MyISAM, скорост на избор и вмъкване с LOAD DATA LOCAL , INSERT INTO , REPLACE INTO и UPDATE , на "плътни" и "фрагментирани" таблици (не съм съвсем сигурен как, мисля, че беше по реда на DELETE FROM ... ORDER BY RAND() LIMIT ... с фиксирано начално число, така че все още да е сравнимо) и активирани и деактивирани индекси.

Тествахме го с много различни версии на MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) на Windows и Linux (но не едни и същи версии и на двете ОС). MyISAM спечели само когато масата беше празна. InnoDB беше по-бърз, когато данните вече бяха налични и като цяло работеше по-добре (с изключение на hdd-space - MyISAM е по-малък на диска).

Все пак, за да се възползвате наистина от него, трябва да го тествате сами - с различни версии, различни конфигурационни настройки и много търпение - особено по отношение на странни несъответствия (5.0.97 беше много по-бърз от 5.5.27 със същата конфигурация - ние все още търся причината). Това, което открихме е че DISABLE KEYS и ENABLE KEYS са почти безполезни и понякога вредни, ако не започнете с празна маса.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да получите идентификатор за последно вмъкване след заявка за вмъкване в активен запис на codeigniter

  2. JQuery UI Запазване на списък за сортиране

  3. Уеб приложението spring-boot губи възможността да се свързва с MySQL / RDS след известно време

  4. Възстановете структурата на таблицата от frm и ibd файлове

  5. Как мога временно да деактивирам ограничение за външен ключ в MySQL?