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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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