Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DBI execute vs execute_array 
V
    Опции темы
Itsys
Дата 24.2.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Вопрос: в таблицу надо вставить, допустим 10000 однотипных строк
Код

INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?)


Что лучше использовать
Код

execute
execute
execute
execute
execute
и т.д.

или
Код

execute_array - один раз на все 10000 строк


PM MAIL WWW Skype   Вверх
ginnie
Дата 25.2.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Itsys, создавать массив из 10000 строк, думаю, не лучший вариант. С точки зрения быстродействия, оба варианта одинаковы. Для увеличения быстродействия необходимо вставлять несколько строк в одном запросе.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
vadiml
Дата 26.2.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Можно в 1 INSERT'e передавать данные сразу для нескольких записей

такой вариант будет работает быстрее и execute для 1 записи, и execute_array

PM MAIL Jabber   Вверх
Itsys
Дата 26.2.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Несколько записей, это как?
INSERT
INSERT
INSERT
PM MAIL WWW Skype   Вверх
ginnie
Дата 26.2.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Да, именно так

Код

/*#1*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#2*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#3*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#4*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#5*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#6*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#7*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#8*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#9*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);
/*#10*/ INSERT INTO Table (Param1, Param2, Param3, Param4, Param5, Param6, Param7) VALUES (?, ?, ?, ?, ?, ?, ?);



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 26.2.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Проблема в том, что что либо INSERT будет производится при чтении очередной строки из файла, либо в конце чтения скопом.... промежуточные вставка по 10, 20, 30 строк - мне кажется смысла не имеют, только увеличивают размер кода, количество проверок условий и переменных.
PM MAIL WWW Skype   Вверх
ramus
Дата 26.2.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: 1
Всего: 1



Я пробовал вставлять записи в БД ORACLE по разному, но разницы ни в производительности, ни со стороны оракла (кол-во execute на сессию) не увидел. Такое подозрение, что у перл драйвер оракла подменяет все на одиночный инсерт (не умеет работать с bulk коллекцией). 
Для себя решил: если надо грузить большие объемы данных (сотни тысяч строк - более 100МБ данных), то лучше на перле если надо обработать входной файл для sqlloader (утилита от оракла) и затем загрузить его этой утилитой. Разница во времени работы различается на порядок!!!

Это сообщение отредактировал(а) ramus - 26.2.2008, 22:41
PM MAIL   Вверх
Itsys
Дата 26.2.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



У меня MS SQL... да и данных ну максимум 20000-30000 строк
PM MAIL WWW Skype   Вверх
vadiml
Дата 27.2.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Несколько записей -- это
INSERT INTO Table (field1, field2, field3, field4, field5, field6, field7)
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?);

Большинство баз такое понимает

PM MAIL Jabber   Вверх
ginnie
Дата 27.2.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



vadiml, MySQL понимает вариант

Код

INSERT INTO Table (field1, field2, field3, field4, field5, field6, field7)
VALUES (?, ?, ?, ?, ?, ?, ?), 
(?, ?, ?, ?, ?, ?, ?), 
(?, ?, ?, ?, ?, ?, ?), 
(?, ?, ?, ?, ?, ?, ?), 
(?, ?, ?, ?, ?, ?, ?);



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
shamber
Дата 27.2.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



что-то я совсем запутался :0 а на месте ? стоят реальные данные или их потом подставляют когда execute делается?
можно пример простенький
PM MAIL Jabber   Вверх
ginnie
Дата 27.2.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



shamber, если DBD поддерживает server-side placeholders, то лучше данные подставлять в execute() или bind() (а prepare() вызывать один раз до цикла). Если не поддерживает, то без разницы.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 27.2.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



По поводу
Цитата(vadiml @  27.2.2008,  14:35 Найти цитируемый пост)
INSERT INTO Table (field1, field2, field3, field4, field5, field6, field7)
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?), 
VALUES (?, ?, ?, ?, ?, ?, ?);


Я уже писал...

Цитата(Itsys @  26.2.2008,  22:07 Найти цитируемый пост)
Проблема в том, что что либо INSERT будет производится при чтении очередной строки из файла, либо в конце чтения скопом.... промежуточные вставка по 10, 20, 30 строк - мне кажется смысла не имеют, только увеличивают размер кода, количество проверок условий и переменных. 



PM MAIL WWW Skype   Вверх
ginnie
Дата 27.2.2008, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Itsys, мне кажется, что Вы еще не замеряли, сколько по времени скрипт будет вставлять в базу Ваши 20000-30000 строк.

P.S. увеличение размера кода, количества проверок условий и переменных незначительно  smile 

Это сообщение отредактировал(а) ginnie - 27.2.2008, 15:58


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Itsys
Дата 27.2.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 2
Всего: 34



Замерял  smile почти 17000 - 145 сек., вопрос - можно ли сократить это время или нет...
я сейчас использую
Код

prepare
а потом на каждую строку файла
execute
execute
execute


PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.