У меня проблема с тайм-аутом запроса.Когда я выполнил:
SELECT COUNT(id) AS rowCount FROM infoTable;
в моей программе, мой вызов JDBC истек через 2,5 минуты.
У меня нет большого опыта администратора базы данных, но в настоящее время мне поручено поддержатьустаревшая база данных.В этой базе данных mysql есть таблица InnoDB:
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| info | longtext | NO | | | |
+-------+------------+------+-----+---------+----------------+
В настоящее время ее высокий идентификатор равен 5 192 540, что является приблизительным количеством строк в таблице.Часть информационного текста имеет размер более 1 миллиона, часть очень мала.Ежедневно добавляется около 3000 строк.Машина имеет много свободного дискового пространства, но не так много дополнительной памяти.Строки читаются и иногда изменяются, но редко удаляются, хотя я надеюсь очистить некоторые старые данные, которые в значительной степени устарели.
Я пытался выполнить тот же запрос вручную на небольшой тестовой базе данных, которая имела1 492 669 строк, установленных на аналогичной машине с меньшим объемом дискового пространства, и это заняло 9,19 секунды.
Я попытался выполнить тот же запрос вручную в еще меньшей тестовой базе данных, содержащей 98 629 строк, и это заняло 3,85 секунды.Затем я добавил индекс к id:
create index infoTable_idx on infoTable(id);
, и последующий COUNT занял 4,11 секунды, поэтому не похоже, что добавление индекса поможет в этом случае.(Только для ударов, я сделал то же самое на вышеупомянутой базе данных среднего размера, и время доступа увеличилось с 9,2 до 9,3 секунды.)
Есть идеи, сколько времени должен занимать такой запрос?Что заблокировано во время этого запроса?Что произойдет, если кто-то будет добавлять данные во время выбора моей программы?
Спасибо за любой совет, Илан