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

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


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

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


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

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