2016-04-29 4 views
1

У меня есть база данных всего 5 миллионов строк, но внутренние соединения и IN занимают много времени (55 секунд, 60 секунд). поэтому я проверяю, есть ли проблема с настройкой MyISAM.Как настроить механизм хранения MySQL

Запрос: SHOW STATUS «ключ%» LIKE

+------------------------+-------------+ 
| Variable_name   | Value  | 
+------------------------+-------------+ 
| Key_blocks_not_flushed | 0   | 
| Key_blocks_unused  | 275029  | 
| Key_blocks_used  | 3316428  | 
| Key_read_requests  | 11459264178 | 
| Key_reads    | 3385967  | 
| Key_write_requests  | 91281692 | 
| Key_writes    | 27930218 | 
+------------------------+-------------+ 

дайте мне ваши предложения по повышению производительности MyISAM

+0

MyISAM - ужасный механизм базы данных. Используйте InnoDB. Если вы можете, у него много функций, которые MyISAM никогда не будет иметь, например, быть журналистами, а не взрываться и потерять все данные, если они будут повреждены. – tadman

+0

по каким-то причинам я не могу изменить двигатель, если не полностью сейчас эффект ... но мы используем много прочитанных данных ... что лучше для MyISAM –

+0

MyISAM не «лучше» ни для чего. Это с 1990-х годов и за последнее десятилетие не привлекло большого внимания. InnoDB последовательно легче масштабируется, MySQL 5.0 до 5.7 значительно улучшил свою производительность. Надеюсь, вы в конце концов сможете это изменить, вы можете бросить кучу памяти в двигатель InnoDB и сделать его летающим по сравнению с MyISAM. – tadman

ответ

1

Я работал с более чем базы данных 45GB, я также столкнулся проблемой производительности ,

Вот некоторые степы, которые я взял для улучшения работы.

(1) Удалите ненужные индексы на столе, обращая особое внимание на индексы UNIQUE, поскольку они отключают буферизацию изменений. Не используйте индекс UNIQUE, если у вас нет причин для этого ограничения; предпочитайте обычный ИНДЕКС.

(2) Вставка в порядке приведет к меньшему количеству разбиений на страницы (что хуже по сравнению с таблицами, не содержащимися в памяти), а объемная загрузка конкретно не связана с размером таблицы, но это поможет уменьшить давление в журнальном журнале.

(3) Если объемная загрузка свежей таблицы задерживается, создавая любые индексы, кроме PRIMARY KEY. Если вы создадите их, как только все данные будут загружены, InnoDB сможет применить процесс предварительной сортировки и массовой загрузки, который будет быстрее и приведет к типично более компактным индексам. Эта оптимизация стала действительной в MySQL 5.5.

(4) Обязательно используйте InnoDB вместо MyISAM. MyISAM может быть быстрее при вставках в конец таблицы. Innodb является блокировка на уровне строк и MYISAM является блокировка на уровне таблицы

(5) Старайтесь избегать сложных запросов на выборку на MyISAM таблиц, которые обновляются часто, и использовать запрос т.п., которые возвращают менее результат на первое условие

(6) Для таблиц MyISAM, которые часто меняются, старайтесь избегать всех столбцов переменной длины (VARCHAR, BLOB и TEXT). В таблице используется динамический формат строк, если он содержит даже один столбец переменной длины

+0

, чтобы перейти от MyISAM к INNO, какие команды и настройки, которые я применяю, пожалуйста, пришлите мне команды –

+0

Если вы хотите изменить движок таблицы, пожалуйста, используйте 'ALTER TABLE t1 ENGINE = InnoDB;' –

+0

Для незначительных проблем при преобразовании см. Http: // mysql.rjweb.org/doc.php/myisam2innodb –

 Смежные вопросы

  • Нет связанных вопросов^_^