|
![]() |
#1 |
Участник
|
А если
X++: while select PMPlaceSecurityTimetable exists join PlaceId from PMPlaceTimeBoard where PMPlaceTimeBoard.DateStart == PMPlaceSecurityTimetable.DateSecure outer join PMPlaceTimeBoard1 where PMPlaceTimeBoard1.DateStart == PMPlaceSecurityTimetable.DateSecure && PMPlaceTimeBoard1.PlaceId == PMPlaceSecurityTimetable.PlaceId { if (PMPlaceTimeBoard1) timeList2.ins(PMPlaceTimeBoard1); } |
|
![]() |
#2 |
Member
|
Цитата:
Сообщение от kashperuk
...
Код я не проверял - так просто, как идея. ... Там внутри первого цикла постоянно переинициализируется RecordSortedList. Внутри одного запроса чтобы это сделать... как минимум придется добавлять сортировку. А вообще чтобы что-то посоветовать, нужно описать задачу. В первом цикле связь организована не по ключевым полям. Вероятно, что не хватает индексов. И сама по себе такая связь вызывает подозрение в корректности кода. Для чего потребовался RecordSortedList во втором запросе тоже не очевидно. Можно было бы просто на запросе сортировку поставить. Возможно, с группировкой. Т.к. опять же непонятно, что является ключем на PMPlaceTimeBoard (т.е. непонятно, будут ли в RecordSortedList записи выбивать друг друга).
__________________
С уважением, glibs® |
|
![]() |
#3 |
----------------
|
На первый взгляд
Во-первых, странно, что во втором select есть связь по PlaceId, которой нет в первом select.
Во-вторых, нам трудно судить о том, что действительно тормозит работу кода. Это может быть неверный план испонения обоих запросов, сложный алгоритм обработки RecordSortedList или что-то еще, что вы упустили в своем примере. Посомтрите планы исполнения запросов и индексы на PMPlaceTimeBoard. В-третьих, может быть подумать о том, чтобы обрабатывались не ВСЕ данные из пары PMPlaceSecurityTimetable, PMPlaceTimeBoard? Зачем обрабатывать данные от начала времен? Как вариант. Сделайте обычный join с сортировками по PlaceId и DateStart (или DateSecure - зависит от индексов), ограничьте список полей только необходимыми, формируйте и обрабатывайте свой RecordSortedList по смене значений полей в курсоре (PlaceId и DateStart)... и не забудьте по окончаению цикла обработать последний RSL. кривовато, конечно, но что не сделаешь ради перфоманса ![]() to kashperuk. Сомневаюсь, что такое вообще возможно в Аксапте. |
|
Теги |
ax4.0 |
|
![]() |
||||
Тема | Ответов | |||
Как организовать цикл | 1 | |||
Складская аналитика. Авторезервирование. Бесконечный цикл. | 8 | |||
Цикл, ttsabort и continue | 8 | |||
Report в цикле с параметром | 3 | |||
Перебор контролов в цикле | 10 |
|