Текущее время: Чт, мар 28 2024, 22:32

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


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


ВНИМАНИЕ!

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



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

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


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

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

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

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


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

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

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


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

Зарегистрирован:
Ср, фев 04 2009, 09:51
Сообщения: 420
Пол: Женский
Да три знака 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, 14:33 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
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, 04:01 
Специалист
Специалист

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

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


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

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

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


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

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

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

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


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

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

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

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

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

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


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

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

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


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

Зарегистрирован:
Пн, мар 12 2012, 09:38
Сообщения: 170
Запускаете трассировку и смотрите там план выполнения запроса.
Если БД выбрала нужный вам индекс - все в порядке.
Если вы все поля указали правильно, все они не пустые, в общем все сделали как надо, но индекс все равно берется другой - либо нужный вам индекс "протух"(попросите пересобрать его коллег из базиса), либо попробуйте указать явно нужный вам индекс через %_hints
Code:
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, 13:22 
Гуру-модератор
Гуру-модератор
Аватара пользователя

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

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


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

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


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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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


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

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


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

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