оптимизировать базу данных mysql - myISAM db

0

У меня есть два вопроса о производительности msyql с моим db с использованием механизма MyISAM:

1), что является разумным способом решения проблемы, что, когда INSERT или UPDATE несколько строк в одной таблице, многие запросы SELECT будут зависать.

2) Легко ли это изменить с MyISAM на InnoDB с текущей версией базы данных?

3) Почему myISAM по-прежнему является параметром mySQL по умолчанию, когда InnoDB хорош, поскольку он обеспечивает блокировку на уровне строк?

4) У меня есть одна проблема при создании базы данных с учетом сообщения вроде ниже:

  • У меня в одной таблице есть много "сообщений".

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

  • Итак, если я поместил поле "view" в таблицу "Posts", это запустит запрос "Update Posts set view = view + 1" в любое время посетителя этого сообщения. Это делает другой запрос выбора на этом Строке зависанием.

  • Если я поместил поле "view" в другой TABLE, я все равно получаю эту проблему, потому что, когда я показываю сообщение на веб-сайте, мне все еще нужен номер представления для этого сообщения, используя внутренний запрос соединения. И этот запрос все еще застревает, если выполняется запрос просмотра обновления.

Извините за мой плохой английский.

Теги:
insert
myisam
innodb

2 ответа

0

Предложение Jaydee о соединении MyISAM и InnoDB является хорошим. Таблицу "views" можно сделать таблицей InnoDB, и она не должна блокировать чтение во время записи.

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

0

Вы уже знакомы с андеграундами почти по всем вопросам, Переключитесь на InnoDB

Сначала проверьте, поддерживается ли поддержка InnoDB. На вашем сервере mysql Выполните следующий запрос:

ПОКАЖИТЕ ВАРИАМЫ, КАК "have_innodb";

если вы получите значение "ДА", вы можете изменить каждую таблицу, которую хотите изменить, с помощью следующего SQL-запроса:

ALTER TABLE [имя_таблицы] ENGINE = InnoDB;

(сначала создайте резервную копию)

В будущих версиях MySQL переключается на InnoDB в качестве механизма хранения по умолчанию. Но из-за устаревшей настройки это не было изменено

  • 0
    проблема в том, что мой БД сейчас слишком большой, не быстро сделать резервную копию. Как насчет использования myISAM и InnoDB или таких, как «Задержка» и «Низкий приоритет»?
  • 0
    Вы можете использовать таблицы разных типов в одной базе данных, так что сочетание MyISAM и InnoDB работает. Конечно, вы получаете преимущества innodb только на таблицах innodb.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню