2014-10-24 2 views
3

Мне задали один вопрос в интервью.Oracle SQL Operator> = имеет более высокую производительность, чем>

Ниже двух SQL получит тот же результат. но у кого более высокая производительность?

SELECT * FROM EMP WHERE DEPTNO >= 4 

SELECT * FROM EMP WHERE DEPTNO > 3 

Ответ первый. В первом SQL база данных будет находить DEPT = 4 непосредственно при поиске. он имеет более высокую производительность. Во втором SQL Database будет находить DEPT = 3 и строку сканирования вперед, которая больше 3.

Я впервые услышал эту теорию. Я не вижу никакого плана выполнения формы различия и номера статистики.

Есть ли какие-либо официальные объяснения?

Я нашел, что некоторые китайские веб-сайты используют одни и те же советы.

http://edm.ares.com.tw/dm/newsletter-2014-03-uPKI-OTP-newrelease/it-1.php

+5

Возможно, в версии Oracle версии 0.1? Oracle CBO имеет возможности переписывать запросы, поэтому сегодня это не оправдано, если бы это было даже верно. – toddlermenot

+0

У меня нет объяснений - может быть какой-нибудь индекс? – Multisync

+2

Я бы согласился, если бы был указатель на A (без копания в оптимизаторе) – Multisync

ответ

2

Я считаю, что это миф, если столбец имеет индекс по этому полю. Я попытался использовать первичный ключ, и в обоих планах исполнения используется сканирование диапазонов индексов, которое довольно быстро выполняется по первичному ключу или уникальному индексу. Производительность двух запросов чрезвычайно близка друг к другу, и оба возвращают аналогичную стоимость, но одна с «>» была на 0,3% выше по расчетной цене ЦП, чем «> =». Я говорю БЫСТРО!

Кроме того, когда я говорю, что что-то работает лучше, обычно я бы имел в виду 10% +, если не больше.

0

Я не уверен на 100%, но если вы создали индекс с большим PCTFREE, и если бы вы смогли заставить значение 3 в одном листовом блоке, а значение 4 находилось в другом листовом блоке. (Это можно проверить с помощью ALTER DATABASE DUMP BLOCK). И если вы заставили Oracle использовать сканирование диапазона индексов.

Тогда, возможно, вы могли видеть из трассы, что один запрос обрабатывал еще одну страницу, чем другую.

Смежные вопросы