Значение имен параметров в файлах трассировки оракула - PullRequest
0 голосов
/ 14 декабря 2010

Я сравниваю результаты двух разных драйверов JDBC oracle с помощью возможностей трассировки SQL . Я использую TKProf для форматирования результатов.

Когда я смотрю на вывод TKProf, иногда вижу параметры с префиксом 'v':

WHERE start_time BETWEEN  :v0  AND  :v1

В других случаях параметры не имеют префикса:

WHERE start_time BETWEEN :1 AND :2

Я подозреваю, что во втором случае оптимизатор запросов не выбирает некоторые индексы.

Есть ли подсказка в соглашении об именовании параметров?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Я, конечно, не эксперт в том, как драйверы JDBC общаются с базой данных. Если повезет, кто-то еще предоставит эту информацию.

Я считаю, что имена параметров не должны ничего значить. Это должно быть именно то, что конкретный драйвер решает вызвать их при отправке запроса в базу данных. Но если вы можете посмотреть на действительные значения переменных связывания, это может вам кое-что сказать. Меня беспокоит то, что один драйвер настраивает его, поэтому значения должны проходить приведение на пути выполнения запроса, что может повлиять на использование индекса.

1 голос
/ 14 декабря 2010

Это частные имена переменных связывания, выбираемые клиентским программным обеспечением; возможно, в вашем Java-коде запрос имеет between ? and ?, который должен быть переведен во что-то, что Oracle поймет. Имена почти не имеют значения - конечно, не имеют ничего общего с индексами или оптимизацией. Я говорю «почти», потому что я не уверен, что Oracle увидит их как один и тот же запрос или выполнит отдельные жесткие разборы каждого.

...