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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Длительный запрос INSERT

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
dubasua
Отправлено: 05 Октября, 2014 - 13:12:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




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


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Попробуй отключить ключи на момент вставки

CODE (SQL):
скопировать код в буфер обмена
  1. ALTER TABLE `tablename` DISABLE KEYS
  2. INSERT...
  3. ALTER TABLE `tablename` ENABLE KEYS
 
 Top
dubasua
Отправлено: 07 Октября, 2014 - 09:21:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Разобрался. Подключился к базе с терминала, начал юзать запрос и смотреть что по чем. Из терминала никаких косяков не нашел. Потом в скрипте php оставил все как есть, отключил только один запрос, и по времени получилось столько же. Причина была в том, что в таблице есть поле(md5) с UNIQUE ключем, куда записывается отпечаток строки, и перед тем как делать вставку, я делал SELECT .... WHERE md5 = {$md5}, дабы не наткнутся на дубликат. И вот как оказалось чем больше строк, тем больше времени. Хотя на поле md5 стоит индекс и UNIQUE key, запрос выполняется на чуть более 8 тыс строк 7-8 сек.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB