Запуск базы данных MySQL и все таблицы InnoDB
Каждый вечер мы получаем список самых медленных запросов, вызывающих наибольшие проблемы, присылаемый нам по электронной почте с помощью пакетного сценария.
В этом списке есть два запроса: вставка и обновление.
Сценарий вставки регистрирует просмотры страниц для пользователя. Чтобы сделать это более эффективным, мы будем писать вставку только один раз для пользователя в сеансе. Таким образом, мы сохраняем страницы, просмотренные в сеансе, и выполняем in_array при загрузке страницы. Если страницы нет в массиве, то пишем вставку.
Эта таблица содержит более 700 000 записей, единственным индексом которых является первичный ключ (id).
Вставка в эту таблицу выглядит так:
insert into page_views (user_id,page_name,created)
values ('4','Test Page','2013-08-13 10:44:21')
Этот запрос отображается в нашем журнале медленных запросов как требующий некоторого времени. Мой вопрос в том, как это можно сделать более эффективным. Я чувствую, что это одна из причин, по которой наша база данных работает медленнее.
У нас также есть запрос на обновление, который выполняется в таблице InnoDB с более чем 14 000 записей. Обновление происходит, когда пользователь впервые просматривает определенную запись, и мы устанавливаем поле под названием «просмотрено» = «ДА».
update test_table set viewed='YES' where id=55
Это обновление также отображается в журнале медленных запросов. Эта таблица «test_table» имеет около (5) разных индексов.
#
Вывод из журнала медленных запросов
Количество: 165 (0,35%) Время: 2252,210041 с всего, 13,649758 с в среднем, от 2,026723 до 313,311842 с макс (8,96%) 95% времени: 1181,480258 с всего, 7,573591 с от 9 до 4 в среднем, от 1,573591 с до 4 с 4, 23,026 ) : всего 12,722 мс, 77 в среднем, от 38 до 233 макс. (0,04 %) 95 % блокировки: всего 11,681 мс, 75 в среднем, от 38 до 84 макс. Отправлено строк: 0 в среднем, от 0 до 0 макс (0,00 %) 0 в среднем, от 0 до 0 макс. (0,00%) База данных: Пользователи: XXXXX@localhost: 100,00% (165) запросов, 99,76% (46921) всех пользователей
Аннотация запроса: SET timestamp=N; ВСТАВИТЬ В page_views (user_id, page_name, created) VALUES ('S', 'S', 'S')1;
Структура таблицы для page_views
id (int) первичный ключ имя_страницы (varchar(255)) дата и время создания
Каковы мои варианты ускорения простой вставки и обновления в очень больших таблицах?
SHOW CREATE TABLE tablename
). - person Joshua Martell   schedule 13.08.2013EXPLAIN
вывод этих запросов? - person O. Jones   schedule 13.08.2013