09.07.2014, 09:38 | #1 |
Участник
|
Оптимизация запроса
Здравствуйте! Вот есть запрос в методе. На sql сервере чтоб его ускорить я использовал времнные таблицы и вложенные запросы или еще что нибудь.
А что разрешается сделать в аксаптовком sql? P.S. связей между таблицами больше никаких нет, параметров других тоже нет. Заранее Спасибо public static SMAServiceOrderTable pclose(str 20 _docnum) { SMAServiceOrderTable SMAServiceOrderTable; N_SMAClaim N_SMAClaim; T_WriteOnRepair T_WriteOnRepair; ; select firstonly SMAServiceOrderTable where SMAServiceOrderTable.stageid == 'Закрыт' join N_SMAClaim where SMAServiceOrderTable.serviceorderid == N_SMAClaim.DOCNUM join T_WriteOnRepair where N_SMAClaim.t_repairid == T_WriteOnRepair.repairid && T_WriteOnRepair.docnum == _docnum; return SMAServiceOrderTable; } |
|
09.07.2014, 10:06 | #2 |
Участник
|
Таблицы T_WriteOnRepair и N_SMAClaim участвуют в запросе только для фильтрации, данные из них потом нигде не используются? Если так, то можно смело заменить "join" на "join TableId from", а учитывая firstonly даже на "exists join".
Если структура данных позволяет, то лучше разбить запрос на несколько. Т.е. если допустим поле docnum в таблице T_WriteOnRepair уникально, то лучше отдельным запросом выбрать нужную запись в этой таблице и взять из неё repairid, и т.д. Ну и конечно индексы. Если нужных индексов ещё нет, то создайте - будет хороший прирост в скорости. |
|
09.07.2014, 11:34 | #3 |
Участник
|
Также хорошим тоном считается использование метода find(). Например:
X++: static InventTable find(ItemId itemId, boolean update = false) { InventTable inventTable; ; inventTable.selectForUpdate(update); if (itemId) { select firstonly inventTable index hint ItemIdx where inventTable.ItemId == itemId; } return inventTable; }
__________________
// no comments |
|
|
Похожие темы | ||||
Тема | Ответов | |||
оптимизация запроса статистики по клиенту | 2 | |||
Оптимизация запроса - ranges | 13 | |||
Оптимизация запроса | 16 | |||
Опять оптимизация запроса | 3 | |||
Оптимизация запроса | 1 |
|