Цитата:
Сообщение от
mazzy
Во-первых, с чего вы взяли, что так будет всегда и у всех.
Во-вторых, явные хинты требуют постоянного административного внимания.
В-третьих, с какой стати у вас сиквел сам этого не понимает? Разберитесь именно с этим.
В-четвертых, где-то в блогах, по-моему, Еременко писал, что условия после всех join'ов в Аксапте работает медленнее, чем условия внутри.
1) думаю будет:
- запрос состоит из inner join-ов, т.о. отсутствие записи в любой таблице ведет к пустому запросу
- множество записей в markupTrans обозначено явно (TransTableId + TransRecId)
- каждая запись в множестве markupTrans ссылается на 1 (и более) записей в FACTURETRANS_RU - FACTURETRANS_RU.MARKUPREFRECID=MARKUPTRANS.RECID (есть индекс по этому полю)
- каждая запись из множества FACTURETRANS_RU ссылается на 1 запись в FACTUREJOUR_RU - это может быть одна и та же запись(FACTUREJOUR_RU.FACTUREID=FACTURETRANS_RU.FACTUREID, MODULE фиксирован - есть уникальный индекс)
= Таком образом выбираются только необходимые данные от меньшего к большему (нет ибыточной выборки) - Не вижу более оптимального плана для данного запроса.
2) отсутствие хинтов,на мой взгляд, требует не менее пристального внимания DBA
3) поработаю над сиквелом.
4) буду знать, даже визуально приятнее читать условия к конкретному join (в общем то следовал схеме запроса DIS слоя)
Цитата:
Сообщение от
mazzy
Про recId и TableId тоже писали. Суть в том, что TableId - аксаптовское поле, не хранимое в базе СКЛе. Это значит, что использование TableId может привести к тому, что таблица исчезнет из SQL-запроса.
это я и пытался довести в сообщении о счетчике сиквела 'page lookups/sec', а вот таблица из запроса никуда не исчезнет (с чего бы ей исчезать из inner join-ов)
Цитата:
Сообщение от
mazzy
Обратите внимание на порядок полей в условиях.
1. Порядок полей должен по возможности совпадать с порядком полей в индексе (в противном случае SQL должен выполнить доп-работу)
учту.
Цитата:
Сообщение от
mazzy
2. Если у вас задействуется несколько индексов, то сначала укажите самый селективный (см. factureTrans)
не совсем понял.
Цитата:
Сообщение от
mazzy
3. Обратите внимание на проверку на модуль. Лучше сравните с константой, нежели поля таблиц
может быть - сиквел подобную подстановку сам делает.