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

MySQL оптимизиране на скоростта на INSERT се забавя поради индекси

Ако искате бързи вмъквания, първото нещо, от което се нуждаете, е подходящ хардуер. Това предполага достатъчно количество RAM, SSD вместо механични устройства и доста мощен процесор.

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

Ето страхотно четиво за конфигурирането на InnoDB

След това трябва да знаете едно нещо - и това е как базите данни вършат работата си вътрешно, как работят твърдите дискове и така нататък. Ще опростя механизма в следното описание:

Транзакция е MySQL, който чака твърдият диск да потвърди, че е записал данните. Ето защо транзакциите са бавни на механичните устройства, те могат да извършват 200-400 входно-изходни операции в секунда. Преведено, това означава, че можете да получавате 200-ти заявки за вмъкване в секунда, като използвате InnoDB на механично устройство. Естествено,това е опростено обяснение , само за да очертая какво се случва, това не е пълният механизъм зад транзакцията .

Тъй като една заявка, особено тази, съответстваща на размера на вашата таблица, е сравнително малка по отношение на байтове - вие на практика губите ценни IOPS за една заявка.

Ако обвиете няколко заявки (100 или 200 или повече, няма точен брой, трябва да тествате) в една транзакция и след това я извършите - незабавно ще постигнете повече записвания в секунда.

Момчетата от Percona постигат 15k вмъквания в секунда на сравнително евтин хардуер. Дори 5k вмъквания в секунда не е лошо. Таблицата като вашата е малка, направих тестове на подобна таблица (3 колони повече) и успях да стигна до 1 милиард записа без забележими проблеми, използвайки 16gb ram машина с 240GB SSD (1 диск, без RAID, използвани за тестови цели).

TL;DR:- следвайте връзката по-горе, конфигурирайте вашия сървър, вземете SSD, обвийте множество вмъквания в 1 транзакция и печелете. И не изключвайте и след това включвайте индексирането, не винаги е приложимо, защото в един момент ще отделите време за обработка и IO, за да ги създадете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Задаване на sql_mode за постоянно

  2. Единични кавички, двойни кавички и обратни кавички в MySQL

  3. Не позволявайте обратен съставен първичен ключ в MySQL

  4. Как да вмъкна json данни в таблица?

  5. ИЗБЕРЕТЕ няколко реда WHERE, отговарящи на две условия