Текущее время: Вс, июл 27 2025, 02:29

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Производительность выборки по неключевому полю
СообщениеДобавлено: Ср, фев 11 2009, 18:59 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
имею запрос
Code:
  SELECT
    EKPO~
    LFA1~
    EKKO~
    T163Y~
    T023T~
   INTO
    (........................)
  FROM EKPO
    INNER JOIN EKKO
      ON EKKO~EBELN = EKPO~EBELN
    INNER JOIN LFA1
      ON EKKO~LIFNR = LFA1~LIFNR
    LEFT OUTER JOIN T023T
      ON T023T~MATKL = EKPO~MATKL AND
      T023T~SPRAS = SY-LANGU
    LEFT OUTER JOIN T163Y
      ON T163Y~SPRAS = SY-LANGU AND
         T163Y~PSTYP = EKPO~PSTYP
  WHERE
    EKPO~KONNR = P_KONNR AND
    EKPO~LOEKZ <> 'L'.
    IF SY-SUBRC = 0.

Выполняется примерно минуту. Добавляю и активирую индекс для поля KONNR в таблицу ekpo
Изображение
вверху есть сообщение что Индекс не существует в системе БД ORACLE, используется СУБД ORACLE 9.2.0.7.0
Как же создавать индексы? Насколько примерно быстрее будет выполняться запрос если будет соответствующий индекс в ekpo?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Ср, фев 11 2009, 19:04 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Нужно активировать индекс (судя по картинке, Ваш не аткивирован - статус "Новое").


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 09:06 
Специалист
Специалист

Зарегистрирован:
Чт, мар 22 2007, 14:40
Сообщения: 142
Пол: Мужской
при наличии индекса выполяться будет быстрее в разы, причем пропорционально размеру таблицы, чем больше там записей тем большей разница будет при выполнении с индексом и без.

а вообще рекомендую все таки по анализу производительности запроса посмотреть trace ST05, там все понятно что куда тратиться.

по данному селекту.
я бы все такие OUTER JOIN вынес в отдельный запрос, хотя это конечно не принципиально и спорно.
и в ключах по JOIN T023T поменять очередность ключей SPRAS, MATKL как они в есть таблице.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 09:42 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Pokusannoe_Zubilo написал:
и в ключах по JOIN T023T поменять очередность ключей SPRAS, MATKL как они в есть таблице.

Ну порядок-то не важен. Интерпретатор весьма успешно разбирается обычно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 09:47 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
Это стандартная логистическая цепочка: контракт -> заказ на поставку. И тем не менее в EKKO нет индекса по KONNR. Почему? Посмотрите таблицу EKAB, там как раз к контрактам все созданные заказы.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 09:50 
Специалист
Специалист

Зарегистрирован:
Чт, мар 22 2007, 14:40
Сообщения: 142
Пол: Мужской
vakito написал(а):
Pokusannoe_Zubilo написал:
и в ключах по JOIN T023T поменять очередность ключей SPRAS, MATKL как они в есть таблице.

Ну порядок-то не важен. Интерпретатор весьма успешно разбирается обычно.


вот тут я поспорю ;) проверено на практие
в некоторые много JOIN ых запросах, если в некоторых таблицах указать не верный порядок ключей то может случиться full scan.

еще раз повотрю проверено на практике, понимаю что в теории все должно быть краисиво., тем более если без JOIN ов ;)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 10:46 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Pokusannoe_Zubilo написал:
вот тут я поспорю ;) проверено на практие
в некоторые много JOIN ых запросах, если в некоторых таблицах указать не верный порядок ключей то может случиться full scan.

еще раз повотрю проверено на практике, понимаю что в теории все должно быть краисиво., тем более если без JOIN ов ;)

Еще оптимизатор запросов, бывает, глючит. Вдруг ни с того ни с сего начинает юзать какие-нибудь левые индексы.
У меня, примеру, был случай. Задаешь в условии
Code:
...DATUM = '20080101'...
- отрабатывает за доли секунды. Задаешь
Code:
...DATUM BETWEEN '20080101' AND '20080102' ...
- подвисает на часы. При том, что в обеих случаях выборка шла по первичному ключу, а DATUM стоял где-то в конце ключа.
Посмотрел план запроса - оказалось, во втором случае зачем-то цепляет совершенно левый вторичный индекс (по одному полю, и это поле не DATUM), и соответственно идет фулл скан. Логики так и не обнаружил.
Пробовал указать хинт - ноль эмоций, игнорируется. Проблема решилась убиением цепляемого левого индекса.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 12:35 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
111 написал(а):
У меня, примеру, был случай. Задаешь в условии
Code:
...DATUM = '20080101'...
- отрабатывает за доли секунды. Задаешь
Code:
...DATUM BETWEEN '20080101' AND '20080102' ...
- подвисает на часы. При том, что в обеих случаях выборка шла по первичному ключу, а DATUM стоял где-то в конце ключа.
Посмотрел план запроса - оказалось, во втором случае зачем-то цепляет совершенно левый вторичный индекс (по одному полю, и это поле не DATUM), и соответственно идет фулл скан. Логики так и не обнаружил.
Пробовал указать хинт - ноль эмоций, игнорируется. Проблема решилась убиением цепляемого левого индекса.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 18:38 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
Спасибо за EKAB выборка стала быстрее.
Просто забыл что после создания индекса надо таблицу переактивировать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Чт, фев 12 2009, 19:23 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
Pokusannoe_Zubilo написал:
я бы все такие OUTER JOIN вынес в отдельный запрос, хотя это конечно не принципиально и спорно.

Поддерживаю. У нас, например, в таблице T163Y для языка EN всего десяток записей. Возможно будет гораздо эффективнее выбрать их все и потом добавить в LOOP? Кроме того, посмотрите, действительно ли нужен LEFT JOIN. Это же вроде таблица конфигурации, неужели там какие-то записи отсутствуют? :?

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Пт, фев 13 2009, 16:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
aivengo написал(а):
Индекс не существует в БД

утилита базы данных -> создать индекс
вернуться в индекс -> активировать


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Пн, фев 16 2009, 18:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Pokusannoe_Zubilo написал:
vakito написал(а):
Ну порядок-то не важен. Интерпретатор весьма успешно разбирается обычно.


вот тут я поспорю ;) проверено на практие
в некоторые много JOIN ых запросах, если в некоторых таблицах указать не верный порядок ключей то может случиться full scan.

еще раз повотрю проверено на практике, понимаю что в теории все должно быть краисиво., тем более если без JOIN ов ;)


Из своего опыта могу сказать - это сильно зависит от конкретной СУБД. В свое время, например, оптимизатор SYBASE сильно зависел от порядка условий в WHERE. А насколько я помню, MS SQL как раз и сделан на базе SYBASE. А посему то, что верно для Oracle может оказаться неверным для MS SQL.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Вт, фев 17 2009, 13:47 
Менеджер
Менеджер

Зарегистрирован:
Вт, авг 17 2004, 13:14
Сообщения: 664
Откуда: Москва
Пол: Мужской
В Oracle недостаточно активировать индекс. Надо по нему еще и статистику собрать. Причем делать это надо регулярно, иначе Oracle перестанет использовать такой индекс.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Вт, фев 17 2009, 15:13 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Parazit написал:
А насколько я помню, MS SQL как раз и сделан на базе SYBASE

по моему от Sybase в MS SQL давно уже ничего не осталось :)
Tim написал:
В Oracle недостаточно активировать индекс. Надо по нему еще и статистику собрать. Причем делать это надо регулярно, иначе Oracle перестанет использовать такой индекс.

ладно бы просто перестал использовать, а то иногда башню сворачивает настолько, что запрос выдает данные, абсолютно несоответствующие условию WHERE

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Производительность выборки по неключевому полю
СообщениеДобавлено: Вт, фев 17 2009, 15:20 
Менеджер
Менеджер

Зарегистрирован:
Вт, авг 17 2004, 13:14
Сообщения: 664
Откуда: Москва
Пол: Мужской
ArmAnn написал:
ладно бы просто перестал использовать, а то иногда башню сворачивает настолько, что запрос выдает данные, абсолютно несоответствующие условию WHERE

Был на нефтянном проекте в продуктиве такой случай с таблицей BSIS :shock: . Потребовалось переиндексировать таблицу. Только дело было не в сборе статистики, у нас полетел индекс. За Oracle тоже следить надо :)


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

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


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

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


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

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