Я не совсем уверен, что вы подразумеваете под I learned that using bind variables makes the parser not work as hard
, но я угадаю ...
Собираете ли вы строки SQL в своем клиенте и отправляете их в базу данных oracle для выполнения?
Если это так, процесс параметризации запросов означает, что механизм БД может видеть, что несколько запросовхотя и с другими параметрами, может выполняться с использованием одного и того же плана выполнения / плана объяснения.
Это означает, что движку не требуется повторная компиляция собственного SQL, и он может повторно использовать план уже (потенциально) в кэше.
Без параметризации и с другими значениями для «имени» механизм будет рассматривать запросы как совершенно разные и не замечать сходства.Это приведет к компиляции SQL, если только точная такая же строка уже находится в кэше.
Если ваши запросы, однако, всегда имеют report.enabled = 1
, нет необходимости параметризовать эту часть запроса.Поскольку он статичен, то, если вы не используете параметр, он не будет выглядеть как другой запрос и не будет вызывать его повторную компиляцию.
Напротив, вы можете сэкономитьв зависимости от индексов, статистики ваших данных и т. д. Если, например, 99% ваших данных имеют значение «enabled = 1», вы можете получить другой план, тогда как 1% ваших данных будет «enabled = 1».Но механизм будет оптимизировать только для «enabled = 1» в запросе, где известно , что искомое значение равно всегда 1. И это только в том случае, если оно указано статически(в буквальном смысле).
Короче говоря, если это действительно статическое значение, не параметризуйте его.