Синтаксис Oracle SQL '+ 0' для объединения? - PullRequest
2 голосов
/ 16 августа 2011

Я использовал оптимизатор SQL от Toad, и он предложил следующее дополнение к моим операторам соединения:

вместо сказать

emp.emplid = dept.emplid

он предложил

emp.emplid = dept.emplid + 0

Что делает «+ 0»?Я искал в Интернете последний час и ничего не могу найти.Я знаю (+) значение, но я никогда не видел ничего подобного.

Ответы [ 2 ]

7 голосов
/ 16 августа 2011

+ 0 делает то, на что похоже.Это добавляет 0 к dept.emplid.Но с точки зрения производительности это действительно имеет значение.Превратив это в выражение, Oracle не может использовать какой-либо индекс на dept.emplid.

Так что, если Oracle выбирает индекс на dept.emplid, но вы предпочитаете использовать другой индекс / план, то добавьте+ 0 - это способ повлиять на оптимизатор, поскольку в этом конкретном столбце больше нет совпадений.Любое выражение сделало бы свое дело.

Другой способ сделать это - получить подсказки оптимизатора.Хотя это может быть немного болезненно для больших запросов.

1 голос
/ 10 апреля 2012

То, что делает «+ 0», это указывает оптимизатору, что он должен использовать другой индекс.Другими словами, я уверен, что одно из этих двух полей (mp.emplid = dept.emplid) имеет, помимо внешнего ключа, еще одно поле, специфичное для индекса.Кроме того, + 0 отменяет индекс, который по умолчанию использует оптимизатор (внешний ключ), и указывает ему выбрать другой индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...