MySQL ALTER TABLE на очень большой таблице - действительно ли безопасно выполнить его?

Инструменты> Предпочтения> Вход & Кодеки взгляд файлы раздел для рекордного каталога. Я создал папку, но Вам нужно, по крайней мере, к Вашему корневому каталогу.

, Когда Вы готовы записать, необходимо нажать Сдвиг + R . Я оплакиваю потерю красной кнопки, но можно посмотреть на раздел горячих клавиш предпочтений и видеть рекордную последовательность.

10
задан Brian Tompsett - 汤莱恩 31 December 2016 в 22:50
поделиться

5 ответов

- это auto_increment первичного ключа? если это так, то выполнение ALTER TABLE ... ORDER BY ничего не улучшит, поскольку все равно все будет вставлено по порядку.

(если у вас не будет много удалений)

1
ответ дан 4 December 2019 в 04:01
поделиться

Как я только что прочитал, ALTER TABLE ... ORDER BY ... query полезен для повышения производительности в определенных сценариях. Я удивлен, что индекс PK в этом не помогает. Но из документации MySQL кажется, что InnoDB действительно использует индекс. Однако InnoDB имеет тенденцию быть медленнее MyISAM. Тем не менее, с InnoDB вам не нужно будет переупорядочивать таблицу, но вы потеряете невероятную скорость MyISAM. Это все еще может стоить того.

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

С другой стороны, я думаю, что ваша проблема заключается в совершенно другом месте: Вы используете машину только с 512 мегабайтами ОЗУ в качестве сервера базы данных с таблицей, содержащей более 4 миллионов строк ... И вы выполняете операцию с очень большим объемом памяти для всей таблицы на этой машине. Кажется, что 512 мегабайт для этого будет недостаточно.

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

И вы выполняете операцию с очень большим объемом памяти для всей таблицы на этой машине. Похоже, что 512 мегабайт для этого будет недостаточно.

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

И вы выполняете операцию с очень большим объемом памяти для всей таблицы на этой машине. Кажется, что 512 мегабайт для этого будет недостаточно.

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

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

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

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

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

3
ответ дан 4 December 2019 в 04:01
поделиться

Вы просите его перестроить всю таблицу и все ее индексы; это дорогостоящая операция, особенно если данные не помещаются в оперативной памяти. Он завершится, но будет намного медленнее, если данные не умещаются в оперативной памяти, особенно если у вас много индексов.

Я сомневаюсь в вашем суждении, когда вы решите запустить машину с такой крошечной памятью в производственной среде. В любом случае:

  • Действительно ли это ALTER TABLE необходимо; какой конкретный запрос вы пытаетесь ускорить и пробовали ли вы это без?
  • Думали ли вы о том, чтобы сделать вашу машину разработки более похожей на производственную? Я имею в виду, что использование блока разработчика с БОЛЬШОЙ памятью никогда не является хорошей идеей, как и использование другой ОС тоже.

Вероятно, вы также можете кое-что настроить, чтобы попытаться помочь; это во многом зависит от вашей схемы (в частности, индексов).

0
ответ дан 4 December 2019 в 04:01
поделиться

Я бы, вероятно, создал вместо этого View, который упорядочен по значению PK, так что, во-первых, вам не нужно блокировать эту огромную таблицу во время выполнения ALTER.

0
ответ дан 4 December 2019 в 04:01
поделиться

Если вы используете InnoDB, вам не нужно явно выполнять ORDER BY ни после вставки, ни во время запроса. Согласно руководству по MySQL 5.0, InnoDB уже по умолчанию использует порядок первичных ключей для результатов запроса:

http://dev.mysql.com/doc/refman/5.0/en/alter-table.html#id4052480

MyISAM вместо этого таблицы по умолчанию возвращают записи в порядке вставки, который также может работать, если вы только когда-либо добавляете в таблицу, вместо того, чтобы использовать запрос UPDATE для изменения любых строк на месте.

0
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: