производительность параметризованного SQL - PullRequest
2 голосов
/ 22 марта 2012

У меня есть запрос типа

SELECT *
FROM myTable
WHERE key LIKE 'XYZ'

Значение 'XYZ' вводится пользователями (и может включать% и _)

Если я создаю запрос с использованием конкатенации строк, он выполняется за 10 секунд. Но это небезопасно, и я должен использовать параметризованный запрос.

Итак, я создаю запрос, используя объект команды odbc и метод execute, и передаю параметр.

SELECT *
FROM myTable
WHERE key LIKE ?

К сожалению, параметризованный метод выполнения SQL занимает целую минуту.

Этот запрос является одним из многих, входящих в пакет детализации / исследования, и у меня были похожие замедления со всеми параметризованными запросами (по сравнению со сцеплением строк).

Как мне узнать, куда идет время (и исправить это)?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Вот мое предположение без дополнительной информации.

У меня были похожие проблемы на SQL Server.В SQL Server, когда столбец в вашей таблице - «varchar», а параметризованный параметр запроса - «nvarchar» (или наоборот), это заставляет SQL Server игнорировать доступный индекс, поскольку тип параметра не соответствует типу индекса, чтов свою очередь приводит к сканированию таблицы.

Возможно, то же самое происходит с Sybase.Если вы видите сгенерированный запрос, вы можете подтвердить наличие несоответствия типов.

Если это так, то двумя решениями будет

  • , явно указав тип параметра равнымсоответствовать типу столбца
  • изменить тип столбца в соответствии с типом генерируемого параметра
0 голосов
/ 05 апреля 2012

У Митча было правильное предложение.

Мне пришлось изменить строку подключения, чтобы использовать драйвер OLEDB, затем я мог установить параметры:

  • Оптимизация Подготовка = Нет
  • Выберите метод = Прямой
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...