Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Передача параметров серверу php pdo  [new]
PizzaPizza
Member

Откуда:
Сообщений: 367
Доброго времени. Подскажите пожалуйста придумал ли я велосипед и имеет ли он смысл вообще.

Ситуация:

экспресс работает с вебсервером и php на Винде

одна из задач - парсинг и добавление в базу данных с оборудования, это порядка десятков вставок в одну таблицу и тысяч в другую

обнаружил в списке компилированных планов множество планов на insert, что имхо не имеет смысла тк разница между ними только в длине переменных (например в одном случае передается @p1 varchar(10), а в другом @p1 varchar(8) и кстати все переменные передаются как varchar)

обнаружил, что специфицировать длину переменной передаваемой при execute можно только если использовать pdo bindParam, вставлять через хранимку и в ней указывать, что входящая переменная также является output. В этом случае сервер использует один и тот же компилированный запрос.

В чём я вижу проблему: я получаю обратно ненужные мне данные из хранимки - гоняю трафик, но это в пределах одной машины, так что не думаю это сильно замедляет процесс.

В чём я вижу преимущество: серверу не надо выбирать из десятков вариантов компилированных запросов и не засоряется кеш запросов.

Наверняка есть "подводные камни" которых я не вижу.

Если короче: раньше я имел вставку кучи varchar с разной длиной и сервер компилировал запрос для каждого сочетания длин параметров , а теперь я переделал так, что вне зависимости от длины переменной она трактуется длиной переменной как в таблице и сервер использует один компилированный план для вставки.
Но мне кажется это не очень нативно у меня получилось.
17 сен 18, 00:53    [21676247]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров серверу php pdo  [new]
PizzaPizza
Member

Откуда:
Сообщений: 367
Я не понимаю, что теперь происходит при вставке.
Делает ли сервер implicit conversion обратно к оригинальной длине строки перед вставкой?
Если я буду делать форматирование длины средствами php и не заморачиваться с bindParam, то опять же серверу придется делать эту конверсию но тогда добавиться преобразование типов из varchar to int, зато я получу один план в Кеше.

Стоит ли уменьшение количества компилированных планов на запрос этой головной боли? Несколько я помню кеш планов не резиновый и много вариантов одного запроса вытесняют другие запросы...
17 сен 18, 01:13    [21676255]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров серверу php pdo  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
PizzaPizza
раньше я имел вставку кучи varchar с разной длиной и сервер компилировал запрос для каждого сочетания длин параметров , а теперь я переделал так, что вне зависимости от длины переменной она трактуется длиной переменной как в таблице и сервер использует один компилированный план для вставки.
Но мне кажется это не очень нативно у меня получилось.
Почему же, вполне нативно, переменная должна соответствовать типу поля.
PizzaPizza
обнаружил, что специфицировать длину переменной передаваемой при execute можно только если использовать pdo bindParam, вставлять через хранимку и в ней указывать, что входящая переменная также является output.
Как то сложно, неужели нельзя указать типы проще?
Но это скорее вопрос для раздела по php, как там правильно делать запросы.
17 сен 18, 08:39    [21676332]     Ответить | Цитировать Сообщить модератору
 Re: Передача параметров серверу php pdo  [new]
PizzaPizza
Member

Откуда:
Сообщений: 367
Возможно я понял в чем моя проблема, но проверить смогу только в конце недели: дело в том, что я не читал документацию на Microsoft драйвер для php, а полагался на базовые функции PDO, в которых, по какой то причине, нет возможности точно указать тип и длину IN параметров (можно только если IN_OUT и только int или varchar), а вот в доках на этот конкретный драйвер показаны константы, которые дают возможность типизировать, причем типами самого mssql.
Вывод - надо читать мануалы производителя, особенно если это проприетарщина.
17 сен 18, 19:44    [21677331]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить