У меня есть два вопроса о производительности 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, я все равно получаю эту проблему, потому что, когда я показываю сообщение на веб-сайте, мне все еще нужен номер представления для этого сообщения, используя внутренний запрос соединения. И этот запрос все еще застревает, если выполняется запрос просмотра обновления.
Извините за мой плохой английский.
Предложение Jaydee о соединении MyISAM и InnoDB является хорошим. Таблицу "views" можно сделать таблицей InnoDB, и она не должна блокировать чтение во время записи.
В качестве альтернативы вы можете создать копию своей основной таблицы в InnoDB, синхронизировать их (триггеры, две записи, независимо от того, что необходимо), а затем отключить их. Это приведет к меньшему времени простоя, чем ALTER TABLE...
, но требует больше работы.
Вы уже знакомы с андеграундами почти по всем вопросам, Переключитесь на InnoDB
Сначала проверьте, поддерживается ли поддержка InnoDB. На вашем сервере mysql Выполните следующий запрос:
ПОКАЖИТЕ ВАРИАМЫ, КАК "have_innodb";
если вы получите значение "ДА", вы можете изменить каждую таблицу, которую хотите изменить, с помощью следующего SQL-запроса:
ALTER TABLE [имя_таблицы] ENGINE = InnoDB;
(сначала создайте резервную копию)
В будущих версиях MySQL переключается на InnoDB в качестве механизма хранения по умолчанию. Но из-за устаревшей настройки это не было изменено