Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибки ТП   to  DmitrO (число прочтений - 16666 )
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Ошибки ТП   to  DmitrO
17. Сентября 2006 :: 08:20
Печать  
to DmitrO

ТП не работает корректно, если ключ порядка задан более чем одним полем.

вот кусок трассы, если ключ порядка = "Наименование Desc, ROW_ID desc"

select top 20
....
where (Эл.Descr < @P10 or Эл.ROW_ID < @P11 and Эл.Descr = @P12)
order by Эл.Descr, Эл.ROW_ID

P10, P12 - это Наименование, причем значение одно и тоже
P11 - это ROW_ID


в условии where  по меньшей мере две ошибки, а скорее их не сосчитать,
короче должно быть так
where (Эл.Descr+str(Эл.ROW_ID ) <  @P10)

Я понимаю,что можно задать ключ порядка по одному  полю
Эл.Descr+str(Эл.ROW_ID )  as index
но в этом случае ТП меняет также выражение order
order Эл.Descr+str(Эл.ROW_ID ) , а в этом случае SQL много медленне делает запрос, чем
order Эл.Descr, Эл.ROW_ID

Итого должно быть:
where (Эл.Descr+str(Эл.ROW_ID ) <  @P10)
order Эл.Descr, Эл.ROW_ID

Из 1С я такое сделать не могу, вся надежда на тебя

« Последняя редакция: 17. Сентября 2006 :: 14:44 - aou1c »  
Наверх
ICQ  
IP записан
 
Aurelius
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 25
Местоположение: г. Долгопрудный, МО
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #1 - 17. Сентября 2006 :: 10:15
Печать  
Цитата:
если ключ порядка = "Наименование Descr, ROW_ID descr"

Наверное...
Код
Выбрать все
"Наименование DESC, ROW_ID DESC" 

  
Наверх
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #2 - 17. Сентября 2006 :: 14:42
Печать  
Aurelius писал(а) 17. Сентября 2006 :: 10:15:
Цитата:
если ключ порядка = "Наименование Descr, ROW_ID descr"

Наверное...
Код
Выбрать все
"Наименование DESC, ROW_ID DESC" 



Да конечно, опечатался, подкорректировал
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #3 - 18. Сентября 2006 :: 12:49
Печать  
Проблема проанализирована. Правильно она звучит так: при ключе порядка состоящим больше чем из одного поля ПоставщикДанныхODBC формирует неоптимальные запросы к серверу.
  
Наверх
ICQ  
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #4 - 18. Сентября 2006 :: 14:00
Печать  
DmitrO писал(а) 18. Сентября 2006 :: 12:49:
Проблема проанализирована. Правильно она звучит так: при ключе порядка состоящим больше чем из одного поля ПоставщикДанныхODBC формирует неоптимальные запросы к серверу.


Неоптимальные запросы - мягко сказано
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #5 - 18. Сентября 2006 :: 14:04
Печать  
aou1c писал(а) 18. Сентября 2006 :: 14:00:
Неоптимальные запросы - мягко сказано
если все же настаиваешь на том, что в условии ошибка, то ошибаешься.
ошибки в нём нет.
неоптимальность - есть.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #6 - 18. Сентября 2006 :: 14:10
Печать  
ибо
(A < X or B < Y and A = X)
эквивалентно
(A+B < X+Y), где "+" - это конкатенация строк
  

1&&2&&3
Наверх
 
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #7 - 18. Сентября 2006 :: 14:18
Печать  
trad писал(а) 18. Сентября 2006 :: 14:10:
ибо
(A < X or B < Y and A = X)
эквивалентно
(A+B < X+Y), где "+" - это конкатенация строк


Дмитрий по аське писал,
подозревает, что проблема в неоптимальности состоит в том что в этом условии две разных переменных с одним и тем же значением и оптимизатор сбивается с seek  на scan.

В одну переменную сделать у него не получается, но можно ведь эту версию проверить
заменив условие. сделать эквивалентно
(A+B < X+Y), там две переменных вместо трех.

  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #8 - 18. Сентября 2006 :: 15:27
Печать  
aou1c писал(а) 18. Сентября 2006 :: 14:18:
но можно ведь эту версию проверить
заменив условие. сделать эквивалентно
(A+B < X+Y), там две переменных вместо трех.

да, в твоем варианте (A+B < X+Y) - всего две переменные: X и Y, но на практике такую конкатенацию проблематично воплотить, т.к. переменные могут быть типов отличных от строкового. Представь X - дата а Y - это число.
  

1&&2&&3
Наверх
 
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #9 - 18. Сентября 2006 :: 15:40
Печать  

[/quote]
да, в твоем варианте (A+B < X+Y) - всего две переменные: X и Y, но на практике такую конкатенацию проблематично воплотить, т.к. переменные могут быть типов отличных от строкового. Представь X - дата а Y - это число. [/quote]

А конвертить что мешает?
  
Наверх
ICQ  
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #10 - 18. Сентября 2006 :: 15:42
Печать  
хотя бы идею проверить "две вместо трех"
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #11 - 19. Сентября 2006 :: 13:22
Печать  
Дополнительные разъяснения, чтобы у всех сложилось четкое понимание этого вопроса.
Дело обстоит так:
1)aou1c была обнаружена проблема;
2)мной проблема была проанализирована изучена и подтверждена;
3)выявлены и обозначены причины: из-за неоптимальных запросов поставщика данных, когда КП состоит более чем из одного поля, сервер формирует неоптимальный план выполнения - он делает Index Scan, вместо Index Seek;
4)вероятно кто-то должен предложить решение;
5)вероятно кто-то должен реализовать решение этой проблемы;
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #12 - 13. Октября 2006 :: 07:06
Печать  
Цитата:
4)вероятно кто-то должен предложить решение;
5)вероятно кто-то должен реализовать решение этой проблемы;

решение было предложено DmitrOй;
решение реализовано;

Нужно протестировать. Есть желающие?
http://www.trad.nm.ru/1cpp_203_TestNewODBCProv_061013.rar
  

1&&2&&3
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Ошибки ТП   to  DmitrO
Ответ #13 - 13. Октября 2006 :: 07:51
Печать  
Очень довольный тогда уж DmitrOм
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибки ТП   to  DmitrO
Ответ #14 - 17. Ноября 2006 :: 20:46
Печать  
trad писал(а) 13. Октября 2006 :: 07:06:
Нужно протестировать. Есть желающие?
http://www.trad.nm.ru/1cpp_203_TestNewODBCProv_061013.rar

Ну, раз тестирование прошло успешно (я не вижу отрицательных отзывов) - запускаем в серию.
Изменения отражены в ветках 2.0.3 и в стволе (2.5).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать