Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Почему так? (число прочтений - 5873 )
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Почему так?
Ответ #15 - 16. Января 2008 :: 14:49
Печать  
Первый параметр - <ГраницаРасчета>. Это и есть Date_Time_IDDOC. Это строка. И скуль прекрасно строку со строкой сравнивает.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Почему так?
Ответ #16 - 16. Января 2008 :: 15:09
Печать  
Точно! Я чё-т сначала подумал, что речь идёт о поле Date_Time_IDDOC  Смущённый
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Почему так?
Ответ #17 - 16. Января 2008 :: 16:12
Печать  
Такое взлетит если тип - строка, как date_time_iddoc
Если же тип datetime, можно попробовать < = :ДКон+ ' 23:59:59.999'
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Почему так?
Ответ #18 - 16. Января 2008 :: 21:57
Печать  
sadovnikov писал(а) 16. Января 2008 :: 14:18:
kiruha писал(а) 16. Января 2008 :: 14:16:
А если индекс по дате?


Не совсем понял вопроса...


Если есть индекс по дате - оптимизатору логично использовать этот индекс.
Но индекс может быть использован либо только в одном из условий "> " (второе условие применяется после первого),
либо в BETWEEN.
Соответственно непонятно, зачем оптимизатору разбивать оптимизируемое выражение на слабооптимизируемые.
Если разница в день, то результат от такой разбивки может быть хуже на порядки.

Вполне логично предположить, что наоборот, оптимизатор два выражения сравнения при попадании в индекс объединяет в одно, чтобы избежать падения производительности. Но в этом случае это тот же самый BETWEEN.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Почему так?
Ответ #19 - 17. Января 2008 :: 04:47
Печать  
Глянь план запроса:

Select Row_ID
From _1SJOURN (NoLock)
Where
     Row_ID Between 100 And 200

По Row_ID посторен индекс. Оптимизатор разбил Between на 2 условия.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Почему так?
Ответ #20 - 17. Января 2008 :: 06:37
Печать  
sadovnikov писал(а) 17. Января 2008 :: 04:47:
Глянь план запроса:

Select Row_ID
From _1SJOURN (NoLock)
Where
     Row_ID Between 100 And 200

По Row_ID посторен индекс. Оптимизатор разбил Between на 2 условия.

Оптимизатор опирается не только на sql запрос ,но и еще на статистику конкретной бд так,
что считаю что прав kiruha да и текст запроса с between более понятный и читаемый.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Почему так?
Ответ #21 - 17. Января 2008 :: 06:47
Печать  
Z1 писал(а) 17. Января 2008 :: 06:37:
Оптимизатор опирается не только на sql запрос ,но и еще на статистику конкретной бд


Согласен. Как говорится, мопед не мой. Я просто привел рекомендации Хендерсона.

Z1 писал(а) 17. Января 2008 :: 06:37:
так, что считаю что прав kiruha да и текст запроса с between более понятный и читаемый.


А вот тут дело вкуса. Меня, например, напрягает And между параметрами Between. Я начинаю тупо теряться. Поэтому Between не использую.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Почему так?
Ответ #22 - 17. Января 2008 :: 06:52
Печать  
sadovnikov писал(а) 17. Января 2008 :: 06:47:
[quote author=Z1 link=1200490370/15#20 date=1200551840]
А вот тут дело вкуса. Меня, например, напрягает And между параметрами Between. Я начинаю тупо теряться. Поэтому Between не использую.

Ну у каждого вкус свой.
Я стараюсь писать в дополнителных скобках т.е
( ind between ind1 and ind2 )
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать