06.06.2009, 13:53 | #1 |
Участник
|
сортировка по индексу group by
господа,я правильно понял?
при группировке запрос не может более быть отсортирован по индексу главной таблицы. Так же весь запрос не может быть отсортирован по полю подчиненной таблицы. иными словами в SELECT SUM(qty) FROM WMSOrderTrans USING INDEX RouteIdx GROUP BY WMSOrderTrans.itemId ASC WHERE ((routeId = N'095000935')) AND ((fullPallet = 0)) JOIN * FROM InventDim GROUP BY InventDim.wMSLocationId ASC WHERE WMSOrderTrans.inventDimId = InventDim.inventDimId результат не отсортировать по RouteIdx . и результат тоже не отсортировать по InventDim.wMSLocationId. И обойти это можно только создав view ?
__________________
The Variable men power. Последний раз редактировалось Varmen; 06.06.2009 в 13:57. |
|
06.06.2009, 13:57 | #2 |
Участник
|
Сортировка идет по группируемым полям.
__________________
Axapta v.3.0 sp5 kr2 |
|
06.06.2009, 13:59 | #3 |
Участник
|
В вашем случае будет сортировка
WMSOrderTrans.itemId ASC, InventDim.wMSLocationId ASC
__________________
Axapta v.3.0 sp5 kr2 |
|
06.06.2009, 14:06 | #4 |
Участник
|
а с индексом как, он игнорируется?
в книжке написано, использование полей вместо индекса "подтормаживает" отчет. Т.е тут цели можно достичь, можно только добавив все поля состоящие в индексе искуственно в group by в нужной последовательности- -> тобишь "торможением" отчета?
__________________
The Variable men power. Последний раз редактировалось Varmen; 06.06.2009 в 14:17. |
|
06.06.2009, 14:39 | #5 |
----------------
|
"все смешалось в доме Облонских"
индекс используется не для сортировки данных, а для быстрой выборки из БД. Сначала SQL-сервер на основе вашего запроса будет строить план и выбирать оптимальное использование индексов, если у вас индекс указан явно, то сервер просто его и использует, а дальше уже начнется фильтрация, объединение и сортировка. У вас не может быть сортировки по RouteID, так как он 1 единственный (в WHERE указан). А чтобы сделать сортировку по WMSLocationId первой, то в запросе надо первым поставить InventDim, а уж потом WMSOrderTrans |
|
06.06.2009, 14:59 | #6 |
Участник
|
книга говорит иначе.
__________________
The Variable men power. |
|
06.06.2009, 15:09 | #7 |
----------------
|
Руководство разработчика:
Цитата:
Using Index and Order By in select statements
If data ordering is important, use ORDER BY in your SELECT statements. If you can predict that the database will not be capable of deciding which index it should choose, use the INDEX keyword to give the database a hint of which index to choose. Combine this with an ORDER BY expression to get MorphX to select records in a specific order. Using the INDEX keyword but without ORDER BY the selected records are sorted according to the definition of the INDEX. If an index has been deactivated (Enabled=No), the SELECT statement is still valid. However, the database cannot use the hint (as the index does not exist), and has to choose some other index. In general, use indexes to optimize selection of records. As a well-defined side effect, data are sorted according to the index definition. Use the REVERSE keyword if you want the sorted output in reverse order. |
|
06.06.2009, 15:25 | #8 |
Участник
|
INDEX просто вставляет в ORDER BY поля, входящие в него.
Какие индексы при этом будут использоваться - это уже на усмотрение сервера По-моему, в книге путается INDEX c INDEX HINT
__________________
Axapta v.3.0 sp5 kr2 |
|
06.06.2009, 17:07 | #9 |
Участник
|
А какая версия системы?
И что за книжка? |
|
07.06.2009, 12:35 | #10 |
Участник
|
если про мой отрывок, то это та книга, которую Вы переводили. стр 63. Стеена Андреасена "Морфих ИТ"
Ниже, идет абзац про индекс хинт, это о чем говорит Warm.
__________________
The Variable men power. |
|
07.06.2009, 14:26 | #11 |
MCITP
|
Книга не иначе говорит, а "по-другому"
Хинт INDEX говорит о том, что нужно отсортировать результат в порядке полей данного индекса. Какой приэтом будет план запроса и будет ли в запросе по факту использоваться данный индекс - вообще вещь ортогональная: Аксапта просто добавит "ордер бай поля_индекса". Но если говорить об исходном вопросе, то если у Вас есть Group by, то Аксапта сама подставит в запрос и эквивалентный Order by по тем же полям. Т.е. добиться запроса с группировкой по одним полям, а сортировкой по другим не получается, насколько я знаю, без дополнительных телодвижений... Для чего это так было сделано - сложно сказать. Вероятно, чтобы обеспечить сортировку именно в порядке группировки. Потому что, в большинстве случаев именно так и нужно по логике, а с другой стороны СУБД (Оракл, по крайней мере) твёрдой гарантии, что результат группировки будет отсортирован в порядке этой группировки не даёт...
__________________
Zhirenkov Vitaly |
|
07.06.2009, 16:19 | #12 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: alex55 (1). |
08.06.2009, 06:13 | #13 |
Участник
|
Цитата:
|
|
Теги |
index, order by |
|
Похожие темы | ||||
Тема | Ответов | |||
Dianne Siebold: Yahoo Group for Dynamics AX | 0 | |||
Dynamics AX: Dynamics AX New Zealand Users Group | 0 | |||
сортировка | 1 | |||
group , но не by | 9 |
|