Текущее время: Пт, май 16 2025, 11:09

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


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

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


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

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