Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передача параметров серверу php pdo / 4 сообщений из 4, страница 1 из 1
17.09.2018, 00:53
    #39703265
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров серверу php pdo
Доброго времени. Подскажите пожалуйста придумал ли я велосипед и имеет ли он смысл вообще.

Ситуация:

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

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

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

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

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

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

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

Если короче: раньше я имел вставку кучи varchar с разной длиной и сервер компилировал запрос для каждого сочетания длин параметров , а теперь я переделал так, что вне зависимости от длины переменной она трактуется длиной переменной как в таблице и сервер использует один компилированный план для вставки.
Но мне кажется это не очень нативно у меня получилось.
...
Рейтинг: 0 / 0
17.09.2018, 01:13
    #39703268
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров серверу php pdo
Я не понимаю, что теперь происходит при вставке.
Делает ли сервер implicit conversion обратно к оригинальной длине строки перед вставкой?
Если я буду делать форматирование длины средствами php и не заморачиваться с bindParam, то опять же серверу придется делать эту конверсию но тогда добавиться преобразование типов из varchar to int, зато я получу один план в Кеше.

Стоит ли уменьшение количества компилированных планов на запрос этой головной боли? Несколько я помню кеш планов не резиновый и много вариантов одного запроса вытесняют другие запросы...
...
Рейтинг: 0 / 0
17.09.2018, 08:39
    #39703325
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров серверу php pdo
PizzaPizzaраньше я имел вставку кучи varchar с разной длиной и сервер компилировал запрос для каждого сочетания длин параметров , а теперь я переделал так, что вне зависимости от длины переменной она трактуется длиной переменной как в таблице и сервер использует один компилированный план для вставки.
Но мне кажется это не очень нативно у меня получилось.Почему же, вполне нативно, переменная должна соответствовать типу поля.
PizzaPizzaобнаружил, что специфицировать длину переменной передаваемой при execute можно только если использовать pdo bindParam, вставлять через хранимку и в ней указывать, что входящая переменная также является output.Как то сложно, неужели нельзя указать типы проще?
Но это скорее вопрос для раздела по php, как там правильно делать запросы.
...
Рейтинг: 0 / 0
17.09.2018, 19:44
    #39703849
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметров серверу php pdo
Возможно я понял в чем моя проблема, но проверить смогу только в конце недели: дело в том, что я не читал документацию на Microsoft драйвер для php, а полагался на базовые функции PDO, в которых, по какой то причине, нет возможности точно указать тип и длину IN параметров (можно только если IN_OUT и только int или varchar), а вот в доках на этот конкретный драйвер показаны константы, которые дают возможность типизировать, причем типами самого mssql.
Вывод - надо читать мануалы производителя, особенно если это проприетарщина.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передача параметров серверу php pdo / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]