Текущее время: Сб, ноя 18 2017, 06:45

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Чт, мар 30 2017, 13:40 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, фев 04 2009, 10:51
Сообщения: 278
Пол: Женский
Подскажите как использовать индексы при чтении таблицы ? Например ,есть таблица BSIS для которой заведен индекс Z100 ( BUKRS,GJAHR,HKONT,MONAT ) Как использовать индекс для выборки информации в программе ! Если можна пример программы с использованием индекса . :oops:


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Чт, мар 30 2017, 14:19 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 11:12
Сообщения: 560
Откуда: Волгодонск
Пол: Мужской
База данных сама выбирает какие индексы использовать ориентируясь на статистику по таблице и т.п.
в большинстве случаев можно только предполагать каким образом будут выбираться данные

Но есть выверт с явным указанием БД использовать индекс ищите %_hints

_________________
Изображение Попытка не пытка


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Чт, мар 30 2017, 15:20 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 09:25
Сообщения: 404
Если хотите использовать индекс таблицы БД, то подавайте на вход SELECT поля, указанные в индексе.
Система автоматически его будет использовать (если посчитает, что он эффективный).

кроме того, элемент данных INDEXID имеет три символа. откуда у Вас индекс Z100?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Чт, мар 30 2017, 15:31 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, фев 04 2009, 10:51
Сообщения: 278
Пол: Женский
Да три знака Z10 . Я не верно написала .
А в SELECT указывать эти поля в WHERE одновременно все ?
например SELECT * FROM BSIS WHERE BUKRS = a1 and GJAHR= a2 and HKONT= a3 and MONAT=a4 into table zbsis1.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей  Тема решена
СообщениеДобавлено: Чт, мар 30 2017, 15:33 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 09:25
Сообщения: 404
oko_5 писал(а):
А в SELECT указывать эти поля в WHERE одновременно все ?
например SELECT * FROM BSIS WHERE BUKRS = a1 and GJAHR= a2 and HKONT= a3 and MONAT=a4 into table zbsis1.


да, при этом непустые.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пт, мар 31 2017, 05:01 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 137
oko_5 писал(а):
А в SELECT указывать эти поля в WHERE одновременно все ?

Самое главное, чтобы первое поле (BUKRS) было указано обязательно, чтобы использовался индекс.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пт, мар 31 2017, 10:37 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 19:21
Сообщения: 915
Самое главное что бы первое поле в индексе было MANDT.

_________________
я твой сап эфай внедрял


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Вс, апр 02 2017, 20:09 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 21:32
Сообщения: 2438
Пол: Мужской
Kengur писал(а):
Самое главное что бы первое поле в индексе было MANDT.

А почему, интересно? В чем смысла манданта в индексе?

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пн, апр 03 2017, 04:59 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 137
ArmAnn писал:
Kengur писал(а):
Самое главное что бы первое поле в индексе было MANDT.

А почему, интересно? В чем смысла манданта в индексе?

Наверное, сап так подстраховывается, чтобы при использовании OpenSQL хотя бы на уровне манданта мог бы быть шанс фильтрации по индексу :-D
А вообще мне тоже не нравится, что в индексах первым полем идёт именно мандант. У него же селективность гораздо меньше, чем у других полей.

Но иногда манданта действительно не хватает в индексе.
Например, при использовании стандартного индекса
Код:
Индекс MSEG~S
SMBLN
SJAHR
SMBLP

Нельзя только по индексу проверить сторнирован документ или нет и приходится поднимать данные из таблицы только для того, чтобы проверить на соответсвие манданта.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пн, апр 03 2017, 07:50 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 21:32
Сообщения: 2438
Пол: Мужской
UKY, Kengur сказал что первым полем должен быть мандант, вот мне интересно и стало.
По поводу манданта в индексе вообще - никто не говорит что он бесполезен в 100% случаев. Всего лишь в 90% :)

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пн, апр 03 2017, 14:08 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 10:38
Сообщения: 113
Запускаете трассировку и смотрите там план выполнения запроса.
Если БД выбрала нужный вам индекс - все в порядке.
Если вы все поля указали правильно, все они не пустые, в общем все сделали как надо, но индекс все равно берется другой - либо нужный вам индекс "протух"(попросите пересобрать его коллег из базиса), либо попробуйте указать явно нужный вам индекс через %_hints
Код:
SELECT *
  FROM BSIS
  INTO CORRESPONDING FIELDS OF TABLE lt_bsis
  WHERE BUKRS = a1
       and GJAHR= a2
       and HKONT= a3
       and MONAT=a4
  %_HINTS ORACLE 'index("BSIS" "BSIS~Z10")'.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пн, апр 03 2017, 14:22 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 14:35
Сообщения: 4319
Откуда: Москва
ArmAnn писал:
Kengur писал(а):
Самое главное что бы первое поле в индексе было MANDT.

А почему, интересно? В чем смысла манданта в индексе?


1. Мандант в индексе помогает, если для выбора данных достаточно поднять индекс, не обращаясь к самой таблице.
Самый частый пример- джойн таблиц, где из второй таблице ораклу было бы достаточно только индекса, но из-за отсутствия манданта (который abap всегда добавляет в условия соединения), приходится читать и сами записи второй таблицы
2. Отсутствие манданта часто сводит с ума оптимизатор. Без посчитанного распределения данных по значениям (чего обычно не делается), Оракл по умолчанию считает селективность поля MANDT достаточно высокой. И часто выбирает стандартный индекс к таблице с MANDT в ущерб гораздо более селективному z-индексу без MANDT.

_________________
Удача - результат нашего желания (© А. Нортон)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Пн, апр 03 2017, 18:47 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 21:32
Сообщения: 2438
Пол: Мужской
LKU писал(а):
1. Мандант в индексе помогает, если для выбора данных достаточно поднять индекс, не обращаясь к самой таблице.
Самый частый пример- джойн таблиц, где из второй таблице ораклу было бы достаточно только индекса, но из-за отсутствия манданта (который abap всегда добавляет в условия соединения), приходится читать и сами записи второй таблицы
2. Отсутствие манданта часто сводит с ума оптимизатор. Без посчитанного распределения данных по значениям (чего обычно не делается), Оракл по умолчанию считает селективность поля MANDT достаточно высокой. И часто выбирает стандартный индекс к таблице с MANDT в ущерб гораздо более селективному z-индексу без MANDT.

1. Ок, понятно.
2. Тут не совсем понял - имеется ввиду работа различие между работой оптимизатора на основе правил или на основе статистики (rule based/cost based)?

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Вт, апр 04 2017, 11:03 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 14:35
Сообщения: 4319
Откуда: Москва
Имелась в виду галочка "создать гистограммы" в RSANAORA, точнее ситуация, когда ее не используют при сборе статистики по таблицам (а обычно не используют)
Допустим над таблицей EKKO есть два индекса:
1. Стандартный индекс:
MANDT
BSART
BSTYP

2. Z-индекс:
LIFNR

Теперь делаем запрос select * from ekko where lifnr = <поставщик> and bsart = <вид заказа>

За кадром ABAP добавит к селекту еще MANDT. Получится, что у стандартного индекса совпадает с запросом два поля, а у Z - одно
В результате очень много шансов, что оптимизатор выберет первый индекс как более подходящий и переубедить его можно будет только хинтом.

А если бы z-индексу тоже в начале приписали MANDT, то у шансов на ошибку оптимизатора было бы гораздо меньше.

_________________
Удача - результат нашего желания (© А. Нортон)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Индекс при работе с прозрачной таблицей
СообщениеДобавлено: Вт, апр 04 2017, 13:35 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 21:32
Сообщения: 2438
Пол: Мужской
LKU, тут я уже не настолько глубоко в теме чтобы обоснованно спорить. Но немного поспорю :)
Не сталкивался с таким - как правило вполне объяснимо и логично почему оптимизатор берет тот или иной индекс, и без учета гистограмм.
В описанном случае причины выбора первого индекса могли бы быть такими:
1. низкая селективность LIFNR (десяток кредиторов?)
2. в наличии пачка мандантов, и действительно дешевле выбрать в одном из них по BSART и BSTYP, чем все шерстить по LIFNR
3. Не обновленная статистика

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


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

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


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

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


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

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