оптимизация таблиц - PullRequest
       1

оптимизация таблиц

1 голос
/ 21 ноября 2011

Я использую MySQl , у меня есть таблица с именем cars , которая находится в моей базе данных dev_db .

Я вставил около 6 000 000 данных в таблицу (это большой объем вставки данных) с помощью массовой вставки , например:

INSERT INTO cars (cid, name, msg, date) 
VALUES (1, 'blabla', 'blabla', '2001-01-08'),
       (11, 'blabla', 'blabla', '2001-11-28'), 
       ... ,
       (3, 'blabla', 'blabla', '2010-06-03');

После такой большой вставки данных в мою автомобили таблица

Я решил также оптимизировать таблицу , как показано ниже:

OPTIMIZE TABLE cars;

Я ждал 53 минуты для оптимизации, наконец, это сделано и консоль mysqlпоказывает мне следующее сообщение:

enter image description here

Msg_text показывает мне эта таблица не поддерживает оптимизацию ... , из-за чего мой мозг дает два вопроса, чтобы задать :

1. Означает ли приведенное выше сообщение mysql, что 53 минуты, которые я ждал, на самом деле не сделали ничего полезного ??

2. нужно ли оптимизировать мою таблицу после вставки большого количества данных?а почему?

Ответы [ 3 ]

1 голос
/ 21 ноября 2011

Похоже, у вас есть таблица InnoDB, , которая не поддерживает OPTIMIZE TABLE

1 голос
/ 21 ноября 2011

Оптимизация полезна, если вы удалили или перезаписали строки или изменили индексы.Если вы только что вставили данные, их не нужно оптимизировать.

Команда MySQL Optimize Table эффективно де-фрагментирует таблицу mysql и очень полезна для таблиц, которые часто обновляются и / или удаляются.

Также смотрите здесь: http://www.dbtuna.com/article.php?id=15

0 голосов
/ 21 ноября 2011

Как вы можете прочитать в выходных данных, InnoDB не поддерживает optimize как таковой.
Вместо этого вместо этого он делает recreate + optimize для индексов.

Результат практически одинаков и не должен вас беспокоить, в результате вы получите оптимизированные индексы.

Однако вам когда-либо придется оптимизировать свои индексы , если вы удаляете строки или обновляете проиндексированные поля.
Если вы только когда-либо вставите, тогда ваши B-деревья не будут разбалансированы и не будутнужна оптимизация.

Итак:

Означает ли приведенное выше сообщение mysql, что 53 минуты, которые я ждал, на самом деле не сделали ничего полезного ??

Время, затрачиваемое на ожидание, было бесполезным, но не по той причине, о которой вы думаете.
Если есть что оптимизировать, MySQL сделает это.

необходимо ли оптимизировать мою таблицу после вставки большого количества данных?и почему?

Нет, никогда.
Причина в том, что MySQL (InnoDB) использует B-деревья, которые быстры, только если они сбалансированы.
Если все узлы находятся на одной сторонедерево, индекс разлагается в упорядоченный список, который дает O (n) время наихудшего случая, полностью сбалансированное дерево имеет время O (log n).
Однако индекс может стать несбалансированным только в случае удаления строк илиизменить значения проиндексированных полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...