Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Длительный запрос INSERT
Форумы портала PHP.SU » » Работа с СУБД » Длительный запрос INSERT

Страниц (1): [1]
 

1. dubasua - 05 Октября, 2014 - 13:12:06 - перейти к сообщению
Доброго времени суток.
Есть таблица в БД. В эту таблицу через веб форму записываются данные. Когда в таблице было не много строк, все работало довольно быстро и без задержек. Сейчас в таблице чуть больше 8000 строк, и запрос на вставку проходит в течении 6 - 8 секунд, в общем очень долго. Хотя запросы на SELECT происходят быстро и без никаких задержек. Таблица самая простая (INNODB), с первичным ключем и автоинкрементом, в таблице есть еще 3 внешних ключа. Вставка происходит с прямыми данными, без select(ов), и без никаких операций. В чем может быть причина такой большой задержки на вставку?
2. teddy - 05 Октября, 2014 - 14:00:37 - перейти к сообщению
Попробуй отключить ключи на момент вставки

CODE (SQL):
скопировать код в буфер обмена
  1. ALTER TABLE `tablename` DISABLE KEYS
  2. INSERT...
  3. ALTER TABLE `tablename` ENABLE KEYS
3. dubasua - 07 Октября, 2014 - 09:21:57 - перейти к сообщению
Разобрался. Подключился к базе с терминала, начал юзать запрос и смотреть что по чем. Из терминала никаких косяков не нашел. Потом в скрипте php оставил все как есть, отключил только один запрос, и по времени получилось столько же. Причина была в том, что в таблице есть поле(md5) с UNIQUE ключем, куда записывается отпечаток строки, и перед тем как делать вставку, я делал SELECT .... WHERE md5 = {$md5}, дабы не наткнутся на дубликат. И вот как оказалось чем больше строк, тем больше времени. Хотя на поле md5 стоит индекс и UNIQUE key, запрос выполняется на чуть более 8 тыс строк 7-8 сек.

 

Powered by ExBB FM 1.0 RC1