Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Сравнение констант и полей  [new]
_любознательный_
Guest
Есть разница в плане производительности между следующими запросами ?

1.
select * from table where const1 > field1 + const2 
2.
select * from table where const1 - const2 > field1 

Понятно, что если существует индекс по полю field1, то в варианте 1 этот индекс не используется.
А если индекса нет, то существует ли какая разница в производительности?
Если существует, то какими средствами эту разницу можно определить?

спасибо.
1 сен 07, 17:54    [4609253]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10039
Well, if you are so _любознательный_, why didn't you test it? Takes less time than posting the question. Anyway, const1 - const2 > field1 will be faster since constant expressions are calculated once only, so const1 - const2 > field1 transforms into const3 > field1 where const3 = const1 - const2, while field1 + const2 would be calculated for each row. How to prove it:

SQL> set autotrace on
SQL> select ename from emp where 1000 > sal + 500;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    10 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    10 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("SAL"+500<1000)


SQL> select ename from emp where 1000 - 500 > sal;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    10 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    10 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("SAL"<500)


SQL> 

SY.
1 сен 07, 23:52    [4609670]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
_любознательный_
Guest
SY
Well, if you are so _любознательный_, why didn't you test it? Takes less time than posting the question. Anyway, const1 - const2 > field1 will be faster since constant expressions are calculated once only, so const1 - const2 > field1 transforms into const3 > field1 where const3 = const1 - const2, while field1 + const2 would be calculated for each row.


Я последую совету и произведу замер времени исполнения. И все таки, можно получить какую-то еще информацию кроме как "set timing"?
2 сен 07, 01:15    [4609768]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
_любознательный_
И все таки, можно получить какую-то еще информацию кроме как "set timing"?

autotrace?
2 сен 07, 09:35    [4609879]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
_любознательный_
Guest
alex-ls
_любознательный_
И все таки, можно получить какую-то еще информацию кроме как "set timing"?

autotrace?


SY уже демонстрировал autotrace ;-)
2 сен 07, 12:01    [4609948]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
_любознательный_
alex-ls
_любознательный_
И все таки, можно получить какую-то еще информацию кроме как "set timing"?

autotrace?


SY уже демонстрировал autotrace ;-)

А вы попробуйте сами. SY просто сократил вывод autotrace. Ну а если Вам этого мало, включайте полную трассировку. :)
2 сен 07, 12:41    [4609973]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
xymbo
включайте полную трассировку. :)

Есть мрачное подозрение, что в данном случае измерительный инструмент слишком сильно повлияет на объект измерений. А конкретно - расходы на трассировку съедят всю разницу и ничего померять не удастся...
Метрология, однако :)

2 автор: на форуме неоднократно приводились способы более точного замера времени выполнения.
2 сен 07, 20:43    [4610497]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
andrey_anonymous
xymbo
включайте полную трассировку. :)

Есть мрачное подозрение, что в данном случае измерительный инструмент слишком сильно повлияет на объект измерений. А конкретно - расходы на трассировку съедят всю разницу и ничего померять не удастся...
Метрология, однако :)

2 автор: на форуме неоднократно приводились способы более точного замера времени выполнения.

Как говорил нам наш профессор по метрологии: "эта наука нужна везде". Да, Вы правы, надо еще учитывать и погрешность инструмента измерений.
2 сен 07, 21:23    [4610523]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
stax..
Guest
_любознательный_
Есть разница в плане производительности между следующими запросами ?

1.
select * from table where const1 > field1 + const2 
2.
select * from table where const1 - const2 > field1 

Понятно, что если существует индекс по полю field1, то в варианте 1 этот индекс не используется.
А если индекса нет, то существует ли какая разница в производительности?
Если существует, то какими средствами эту разницу можно определить?

спасибо.

имхо второй быстрые
выражение вычислит до выполнения оптимизатор
const1 - const2 вычислится раз оптимизатором
......
stax
3 сен 07, 11:00    [4611442]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
_любознательный_
Guest
stax..

имхо второй быстрые
выражение вычислит до выполнения оптимизатор
const1 - const2 вычислится раз оптимизатором
......
stax


Мое ИМХО совпадает с Вашим ИМХО.
Но хочется получить данные подтверждающие сей факт.
3 сен 07, 13:20    [4612435]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
Stax..
Guest
_любознательный_

Мое ИМХО совпадает с Вашим ИМХО.
Но хочется получить данные подтверждающие сей факт.



13-8 Концепции сервера ORACLE
Как ORACLE оптимизирует предложения SQL

Этот раздел объясняет, как ORACLE оптимизирует предложения SQL.
Для каждого предложения SQL, обрабатываемого ORACLE, оптимизатор
выполняет следующие задачи:
.

вычисление Сначала оптимизатор вычисляет выражения и
выражений условия, содержащие константы, с наибольшей
и условий возможной полнотой.

.
трансформация Для сложного предложения, оптимизатор может
предложения трансформировать оригинальное предложение в
эквивалентное предложение соединения.

....
.....
stax
3 сен 07, 13:46    [4612620]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
_любознательный_
Guest
Stax..
_любознательный_

Мое ИМХО совпадает с Вашим ИМХО.
Но хочется получить данные подтверждающие сей факт.



13-8 Концепции сервера ORACLE
Как ORACLE оптимизирует предложения SQL

Этот раздел объясняет, как ORACLE оптимизирует предложения SQL.
Для каждого предложения SQL, обрабатываемого ORACLE, оптимизатор
выполняет следующие задачи:
.

вычисление Сначала оптимизатор вычисляет выражения и
выражений условия, содержащие константы, с наибольшей
и условий возможной полнотой.

.
трансформация Для сложного предложения, оптимизатор может
предложения трансформировать оригинальное предложение в
эквивалентное предложение соединения.

....
.....
stax


Ведь может быть так, что Оракл трансформирует выражение из вида (field1 + const1 > const2) в выражение (field1 > const2 - const1)?
Ведь не спроста Том Кайт и другие стараются на тестах подтвердить те или иные факты работы Оракла.
3 сен 07, 14:41    [4613030]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
stax..
Guest
_любознательный_

Ведь может быть так, что Оракл трансформирует выражение из вида (field1 + const1 > const2) в выражение (field1 > const2 - const1)?
Ведь не спроста Том Кайт и другие стараются на тестах подтвердить те или иные факты работы Оракла.

имхо, не транспонирует, пока сложно ето для него
SY показал
.....
stax
3 сен 07, 15:01    [4613176]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение констант и полей  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63932
Блог
_любознательный_
Ведь может быть так, что Оракл трансформирует выражение из вида (field1 + const1 > const2) в выражение (field1 > const2 - const1)?

Могло бы быть. Но на практике, такое выражение - старый и известный способ отключить использование индекса, прием "оптимизации запроса без хинтов", и я не слышал, чтобы он перестал работать (подозреваю - его как раз постараются не отключать подольше, дабы поменьше было "старый код стал тормозить").
3 сен 07, 15:03    [4613193]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить