Текущее время: Пн, июл 28 2025, 20:01

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Как заставить использовать индекс
СообщениеДобавлено: Ср, окт 26 2005, 10:16 
Гость
Для таблицы z00bt_docs_head есть индекс (1) по полям
mandt, gjahr, perio, divid, hierid, formid ...

Для таблицы z00bt_docs_posc есть индекс (2) по полям
mandt, belnr, fieildid ...

Для следующего запросика

Code:
select
  h~belnr
  pc~fieldid
  pc~value
into
  v_key
from
  z00bt_docs_head as h inner join
  z00bt_docs_posc as pc on
  h~belnr = pc~belnr
where
  h~gjahr > 0 and
  h~perio > 0 and
  h~divid > '' and
  h~hierid = 'RZD_SL' and
  h~formid = 'SL0001' and
  pc~fieldid like 'LABOURGR_%'.


смотрю план выполнения и вижу, что используется полный просмотр таблицы z00bt_docs_head и соединение со второй таблицей по индексу (2)

Как заставить для z00bt_docs_head использовать индекс (1) и
избежать полного просмотра

Условием

Code:
  h~gjahr > 0 and
  h~perio > 0 and
  h~divid > '' and
  h~hierid = 'RZD_SL' and


пытался включить индекс (1) - не получается?!


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 10:27 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
И не получится. Индекс цепляется по условию '=' и 'AND'.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 10:30 
Гость
С каких это пор?! И почему?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 10:39 
Гость
И еще вопрос. На системе разработки стоит Oracle, на продуктиве DB2. Когда я смотрю на план выполнения на разработке (после выполнения программы с запросом), то вижу план запроса. Когда я выполняю программу на продуктиве с трассировкой, то вижу только рекурсивные запросы (системные - обращения к таблицам TADIR и т.п.), но не вижу результата своего запроса. Что следует сделать?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 11:09 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
SAP-мучитель написал(а):
С каких это пор?! И почему?

Вот здесь написано:
Цитата:
The database index search is particularly efficient if you check all index fields for equality (= or EQ) and link the expressions using AND.
.
А на вопрос "почему" Вам ответит курс BC490.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 11:20 
Гость
По-английски читать умеем или как? Здесь написано, что поиск по индексу особенно эффективен для условий равенства объединенных предикатом AND, что не исключает возможности сканирования индекса в диапазоне.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 14:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Code:
select
...
from
  z00bt_docs_head as h inner join
  z00bt_docs_posc as pc on
  h~belnr = pc~belnr
where
  h~gjahr > 0 and
  h~perio > 0 and
  h~divid > '' and
  h~hierid = 'RZD_SL' and
  h~formid = 'SL0001' and
  pc~fieldid like 'LABOURGR_%'.

Что-то диапазонов не наблюдается :o
Зачем нужно выбирать документы за все годы, используя индекс, в котором год стоит на первом месте?
Если все-таки нужно, то может, создать индекс по
Code:
  mandt
  hierid
  formid

для таблицы z00bt_docs_head
и
Code:
  mandt
  belnr
  eldid

для z00bt_docs_posc?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 26 2005, 14:34 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Ну раз Вы так хорошо умеете читать, тогда, может быть, Вы почитаете документацию и сами ответите на свои вопросы? И заодно выясните, что выберет database optimizer при правильной настройке: index range scan по полю MANDT или full table scan.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 07:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
А я думал только на нашем проекте пишут такие ... запросы :roll:
Один из примеров:
Code:
  SELECT  DISTINCT
          likp~xabln AS xabln
          likp~vbeln lips~posnr
          lips~matnr wadat likp~route
          lips~mvgr1 lips~mvgr2 likp~kunnr kunag
          likp~bolnr vbsk~zzntgew AS ntgew
          vbsk~zzlfimg AS lfimg lips~vrkme lips~werks
          lips~charg traid
          lips~vgbel lips~vgpos lips~arktx AS maktx vbss~sammg
          lips~kvgr3
          vbsk~zztddat AS tddat
          likp~traty vbsk~zzvagonblng AS vagonblng_code
          vbsk~zzvktra AS vktra
          lips~kvgr3
          vbsk~smart
          a~bstkd vbak~submi vbak~vkgrp
          vbap~zzvagonblng vbap~zz_tonnage
     INTO CORRESPONDING FIELDS OF TABLE gd_select
       FROM likp
         JOIN lips ON likp~vbeln = lips~vbeln
         JOIN vbss ON likp~vbeln = vbss~vbeln
         JOIN vbsk ON vbss~sammg = vbsk~sammg
         JOIN vbuk ON vbuk~vbeln = lips~vbeln
         JOIN vbak ON vbak~vbeln = lips~vgbel
         JOIN vbkd AS a ON
              a~vbeln = vbak~vbeln AND
              a~vbeln = lips~vgbel AND
              a~posnr = lips~vgpos
         JOIN vbkd AS b ON a~bstkd = b~bstkd
         JOIN vbap ON vbap~vbeln = a~vbeln AND
              vbap~posnr = a~posnr
       WHERE     likp~kunag IN so_kunag
             AND lips~vgbel IN so_vgbel
             AND lips~matnr IN so_matnr
             AND likp~vkorg = p_vstel
             AND vbsk~zzwbstk = g_param-p_zzwbst
             AND vbsk~zzkostk = g_param-p_zzkost
             AND vbsk~zzbstkd IN so_dog
             AND vbsk~zzkunnr IN so_kunnr
             AND vbsk~zzetenr IN so_etenr
             AND lips~vgbel NE ''
             AND lips~vgpos NE 0
             AND b~vbeln IN so_dog
             and vbss~sammg IN so_sammg
             AND vbsk~zzlddat IS NOT NULL
             AND vbss~sortf IN g_param-p_sortf.


Прикольно... :(

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, окт 27 2005, 10:20 
Гость
Code:
         JOIN vbkd AS a ON
              a~vbeln = vbak~vbeln AND
              a~vbeln = lips~vgbel AND
              a~posnr = lips~vgpos
         JOIN vbkd AS b ON a~bstkd = b~bstkd

Вот этот кусочек мне особенно понравился :)
Он корректно работает?


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

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Он вообще не работает... после воспитательной работы с программистом данная выборка была ... также убита... :)

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 28 2005, 10:11 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Может выложите результаты воспитательной работы ;) Любопытно на что заменили.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 31 2005, 11:17 
Гость
2 All

Цитата:
Ну раз Вы так хорошо умеете читать, тогда, может быть, Вы почитаете документацию и сами ответите на свои вопросы? И заодно выясните, что выберет database optimizer при правильной настройке: index range scan по полю MANDT или full table scan.


Полностью согласен, приношу свои извинения, мой запрос составлен действительно абсолюьно неправильно. Остается вторая часть вопроса. Почему при переносе на продуктив я не вижу плана выполнения запроса, после трассировки. На разработке Oracle - вижу, на продуктиве DB2 - нет, вижу только обращения к системным таблицам. Что и где надо настроить?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 01 2005, 07:43 
Гость
Ну у вас и запросы - сказала база данных и повисла :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 01 2005, 12:59 
Гость
SAP-мучитель написал(а):
2 All

Полностью согласен, приношу свои извинения, мой запрос составлен действительно абсолюьно неправильно. Остается вторая часть вопроса. Почему при переносе на продуктив я не вижу плана выполнения запроса, после трассировки. На разработке Oracle - вижу, на продуктиве DB2 - нет, вижу только обращения к системным таблицам. Что и где надо настроить?


А теперь вопрос - к базису не пробовал обращатся ??? :evil:


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

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