SQL запросы, master-detail и большой объем данных
Добавлено: 16 апр 2008, 08:29
Добрый день.
Есть задача построить master-detail отчет. Добавлены конекшн и два датасорса.
Мастер-датасорс: select * from Customers
Дитэйл-датасорс: select * from Orders
Добавлен релэйшн. Все ОК.
НО, проблема в том, что Заказы (Ордерс) имеет порядка 3000000 записей.
Соотв., т.к. запрос для Заказов перед рендером отчета выбирает ВСЕ заказы (см. запрос), привью отчета валится с ошибкой о нехватке памяти.
Вопросы:
1) как можно оптимизировать выборку данных, чтобы генерился запрос на получение ТОЛЬКО тех Заказов,
которые связаны с выводимыми в отчет Покупателями ?
Опережая ваш ответ, скажу, что единственным приемлимым вариантом вижу указание критерия отбора (в запросе) для мастер-датасорса:
'select * from customers where FirstName = 'John'', затем указание для дитейл-датасорса такого же условия:
'select * from orders o
inner join customers c on c.customerId = o.customerId
where c.FirstName = 'John''
НО при этом я ухожу от универсальности.
2) как можно обойти проблему нехватки памяти (при этом виртуальная память скорее всего не используется, т.к., визуально из ТаскМэнэджера, когда заканчивается место в ОЗУ, валится это исключение) ? Кеширование страниц на диск включено, НО, я так понимаю, до рендера страниц дело еще не дошло!
3) где можно скачать внятную документацию с описанием ПОЛЕЙ/ПРОПЕРТЕЙ классов, а не серию "How to ... ?" ? Т.к. для 99% пропертей нет хмл-описания (v.2007.2, сейчас обновляемся на 2008.2)
Спасибо.
Есть задача построить master-detail отчет. Добавлены конекшн и два датасорса.
Мастер-датасорс: select * from Customers
Дитэйл-датасорс: select * from Orders
Добавлен релэйшн. Все ОК.
НО, проблема в том, что Заказы (Ордерс) имеет порядка 3000000 записей.
Соотв., т.к. запрос для Заказов перед рендером отчета выбирает ВСЕ заказы (см. запрос), привью отчета валится с ошибкой о нехватке памяти.
Вопросы:
1) как можно оптимизировать выборку данных, чтобы генерился запрос на получение ТОЛЬКО тех Заказов,
которые связаны с выводимыми в отчет Покупателями ?
Опережая ваш ответ, скажу, что единственным приемлимым вариантом вижу указание критерия отбора (в запросе) для мастер-датасорса:
'select * from customers where FirstName = 'John'', затем указание для дитейл-датасорса такого же условия:
'select * from orders o
inner join customers c on c.customerId = o.customerId
where c.FirstName = 'John''
НО при этом я ухожу от универсальности.
2) как можно обойти проблему нехватки памяти (при этом виртуальная память скорее всего не используется, т.к., визуально из ТаскМэнэджера, когда заканчивается место в ОЗУ, валится это исключение) ? Кеширование страниц на диск включено, НО, я так понимаю, до рендера страниц дело еще не дошло!
3) где можно скачать внятную документацию с описанием ПОЛЕЙ/ПРОПЕРТЕЙ классов, а не серию "How to ... ?" ? Т.к. для 99% пропертей нет хмл-описания (v.2007.2, сейчас обновляемся на 2008.2)
Спасибо.