2012-03-04 5 views
1

Я использую только базу данных MyISAM, а обновление на больших таблицах занимает слишком много времени. Размер таблицы составляет около 30 ГБ (по 15 ГБ для MYD и MYI). В любом случае, я могу улучшить скорость, не смотря на индексы?оптимизация оператора обновления

+0

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

ответ

1

MYISAM ключ настройки кэша: http://docs.oracle.com/cd/E19957-01/mysql-refman-5.4/optimization.html#myisam-key-cache

оптимизаций Общие характеристики: (есть много) http://docs.oracle.com/cd/E19957-01/mysql-refman-5.5/optimization.html

30 GB довольно большой, вы бежите высокого класса сервера?

+0

Mysql потребляет более 100% процессора, а иногда процессор отображается на 30 - 50% в верхней части. Это нормально? Другой вопрос: если я выберу перед обновлением записи, будет ли кеш использоваться? – shantanuo

+0

Зависит от того, на какой машине он работает. Я запускал небольшие серверы до того, где это слишком высоко, и я был на общих веб-хостах, где 100% -ное время процессора ничего не значит, потому что на нем работает 24 ядра. Однако 30 ГБ довольно высока даже для сервера со многими ядрами и большой оперативной памятью (многие высокопроизводительные серверы обрабатывают 32-64 в 2012 году). Если у вас есть небольшое подмножество запросов, к которым часто обращаются, тогда это может быть ОК. Если вы запрашиваете большой набор, и большая часть вашего db хранится в ОЗУ, ваша большая бутылочная горловина должна вывести эти файлы с диска в ОЗУ. – SinisterRainbow

1

Если вы загружаете большое количество данных, смотрите на массовые команды вставки или даже загружаете данные в зависимости от конкретной ситуации.

Если вы делаете много вставок, вероятно, стоит проверить отключение ключей до вставок. Это может помочь ускорить процесс.

Использование

insert into myTable values("rec1","hello"),("rec2","world"),("rec3","cheesy huh"); 

вставит 3 записи в заявлении от 1 - опять же, вы должны проверить его.

Я сделал эту форму вставки с тысячами рядов, и она хорошо работает в моем примере.

0

еще несколько нот, которые могут быть interessting:

  • Change Storage Engine (InnoDB лучше для highvolume таблиц)
  • Partitionate ваших таблиц (или всей БД) в более логические срезы (например, данные по годам, месяц, региональные и т.д.), поэтому таблица будет больше, но меньшие
  • Убедитесь, что MySQL присоединиться размерами буфера и аналогичные показатели являются достаточно большими для быстрой доставки
Смежные вопросы