и как это по Вашему работает ?
Во!
Да, но когда таких запросов в базу наlо фигануть сотню тысяч в секунду, уже не до жиру - гоним plain SQL.
зачем, когда есть prepared statement?
потому что оно работате на рефлексии
что работает на рефлексии?
надо только посмотреть как такой запрос собрать insert into t1 (col1, col2) values (?, ?), (?, ?) ..... (?, ?);
Когда запросов на вставку сотни тысяч, впору подключать copy
но бывает разные ситуации, когда копи не получится
В блоке values можно положить не одну строку, а много (сколько именно - зависит от базы и е настроек). Это сильно быстрее параметризованных statements.
А в какой версии стандарта SQL он появился?
Это фичи отдельных СУБД, но речь про стандартные решения вроде и не шла
А человек и не сказал какая у него база. И я не сказал, но у нас продукты работают с 10-ком популярных СУБД.
что мешает использовать батч запросы с prepared statements? не будет многократный парсинг SQL быстрее однократного
Это практически опыт или предположение? Если первое, то на каких системах и драйверах проверялось? Ведь все эти ? еще и ресолвить надо. И квотить, и типы конвертировать.
А это практически опыт или предположение? Если первое, то на каких системах и драйверах проверялось?
> Ведь все эти ? еще и ресолвить надо. И квотить, и типы конвертировать. а если не prepared, то не надо что ли?
Практический опыт. Все базы, поддерживающие SQL начная со стандарта 92.
Надо, но это в наших руках и мы умеем делать это оптимальным образом.
каким таким оптимальным образом вы типы собрались на клиенте конвертировать?
За счет знания о типах колонок в таблице. Но это уже кишочки пошли. Собственно я вот как сформулирую: если у вас большой insert с тысячами строк на борту, выполняемый 1 раз, то собрать его вручную и выполнить у меня получается быстрее чем prepare + resolving параметров.
на какой СУБД а PREPARE вы как выполняли? с одиночными инсертами?
Postgre, Oracle, MS SQL, MySQL. Возможно, ребята для SQLite проверяли и DB2, но точно не скажу. Нет, prepare для всех 10 тысяч строк в одном statement. По одной вставлять еще медленнее, чем эти два варианта.
prepare делается один раз вся фишка в экзеке res, _ := stmt.Exec(vals...)
Так в данном случае и exec у нас 1 раз.
да. зато vals там особый
Обсуждают сегодня