Текущее время: Вт, июл 22 2025, 21:05

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: IN в WHERE
СообщениеДобавлено: Ср, апр 04 2007, 09:29 
Специалист
Специалист

Зарегистрирован:
Ср, мар 21 2007, 14:32
Сообщения: 158
Господа!
делаю запрос к таблице в которой несколько миллионов записей.
в этом запросе есть условие
WHERE rbukrs IN so_bukrs AND
rldnr = pledgerA AND
rvers IN soversnA AND
ryear = p_gjahr AND
rtaxobj in ('00208-060','00208-070')
Это работает дико медленно. Я так понимаю это из-зи того, что используется IN. Потому что, если вместо rtaxobj in ('00208-060','00208-070') сделать rtaxobj = '00208-060', то запрос выполняется быстро.
в индексах все поля из WHERE есть. Как нить это можно ускорить?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 09:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Дело, судя по всему, в том, что когда идёт поиск по ключам, то open SQL сначала ищет в буфере, а только потом в БД. Когда используется in, буфер не используется.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 10:14 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 07 2006, 12:48
Сообщения: 76
Пол: Мужской
sibrin написал:
Дело, судя по всему, в том, что когда идёт поиск по ключам, то open SQL сначала ищет в буфере, а только потом в БД. Когда используется in, буфер не используется.


А это точно, что буфер при IN statement не используется?!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 10:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
WhiteScorpio написал:
А это точно, что буфер при IN statement не используется?!


Лучше экспериментально проверить.

А вот теория.
SAP library написал(а):
The SELECT statements bypass the buffer:
· The BYPASSING BUFFER addition in the FROM clause
· The DISTINCTaddition in the SELECT clause
· Aggregate expressions in the SELECT clause
· Joins in the FROM clause
· The IS NULLcondition in the WHERE clause
· Subqueries in the WHERE clause
· The ORDER BY clause
· The GROUP BY clause
· The FOR UPDATEaddition


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 10:47 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 07 2006, 12:48
Сообщения: 76
Пол: Мужской
Занятно, даже очень! Так как я считаю что при работе с БД надо знать все тонкости, Ты мне и другим не подскажешь, откуда Ты скапировал этот текст?!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 10:59 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Думаю, здесь можно почитать:

http://help.sap.com/saphelp_470/helpdata/en/fc/eb3b7e358411d1829f0000e829fbfe/content.htm


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 11:05 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, дек 07 2006, 12:48
Сообщения: 76
Пол: Мужской
Спсибо!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: IN в WHERE
СообщениеДобавлено: Ср, апр 04 2007, 11:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
_gary_ написал(а):
Господа!
делаю запрос к таблице в которой несколько миллионов записей.
в этом запросе есть условие
WHERE rbukrs IN so_bukrs AND
rldnr = pledgerA AND
rvers IN soversnA AND
ryear = p_gjahr AND
rtaxobj in ('00208-060','00208-070')
Это работает дико медленно. Я так понимаю это из-зи того, что используется IN. Потому что, если вместо rtaxobj in ('00208-060','00208-070') сделать rtaxobj = '00208-060', то запрос выполняется быстро.
в индексах все поля из WHERE есть. Как нить это можно ускорить?

Возможно rtaxobj in ('00208-060','00208-070') препятствует использованию индексов? Можно поглядеть в ST05. Вообще, конретно этот IN можно преборазовать в OR, либо в RANGE. В любом случае будут условия с "=".

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 14:32 
Специалист
Специалист

Зарегистрирован:
Ср, мар 21 2007, 14:32
Сообщения: 158
это точно что rtaxobj с IN-ом мешается.
OR я пробовал - не помогло. и RANGE думаю тоже не поможет.
Непонятно почему именно из-за rtaxobj тормозит. ведь есть и другие поля в условии проверяющиеся по IN.
Я уже в select конкретный индекс указывал.
%_HINTS ORACLE 'INDEX("ZTAXREGA" "ZTAZREGA~04")'.
все равно медленно работает.
пришлось делать два select отдельный.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 16:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
_gary_ написал(а):
ведь есть и другие поля в условии проверяющиеся по IN.


Так они, наверное, в индекс не входят.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 16:33 
Специалист
Специалист

Зарегистрирован:
Ср, мар 21 2007, 14:32
Сообщения: 158
все поля в индексе есть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 04 2007, 17:08 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
_gary_ написал(а):
это точно что rtaxobj с IN-ом мешается.
OR я пробовал - не помогло. и RANGE думаю тоже не поможет.
Непонятно почему именно из-за rtaxobj тормозит. ведь есть и другие поля в условии проверяющиеся по IN.
Я уже в select конкретный индекс указывал.
%_HINTS ORACLE 'INDEX("ZTAXREGA" "ZTAZREGA~04")'.
все равно медленно работает.
пришлось делать два select отдельный.


Не надо таких радикальных действий. Поговорите с базисниками, скорее всего, сбилась статистика индексов, если всё так, как Вы говорите.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: IN в WHERE
СообщениеДобавлено: Ср, апр 04 2007, 17:24 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
_gary_ написал(а):
Потому что, если вместо rtaxobj in ('00208-060','00208-070') сделать rtaxobj = '00208-060', то запрос выполняется быстро.
в индексах все поля из WHERE есть. Как нить это можно ускорить?
А может все проще? Может быть данных с '00208-070' значительно больше чем с '00208-060'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 05 2007, 08:20 
Специалист
Специалист

Зарегистрирован:
Ср, мар 21 2007, 14:32
Сообщения: 158
нет
в таблице строк с 00208-060 и 00208-070 всего по две.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 05 2007, 08:35 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
тогда уж продолжая мысли Mike1, если сделать
rtaxobj = '00208-070', быстро или медленно?


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB