|
CR-XI. Уж больно непродуктивно запросы ходят.
#35510650
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: Екатеринбург
Сообщения: 926
|
|
Есть у меня 2 базы данных, создаю 2 коннекта, и 3 запроса по БД. Ожидаю, что CR выполнит все запросы, а затем приджойнит одно к другому. Как бы не так, CR получает первый запрос, сканирует его и на каждом кортеже вызывает второй запрос. Далее, второй запрос сканируется и на каждом его кортеже вызывается третий запрос. В любом случае, логи сервера сообщают, что сервак просто бомбардируется запросами. Есть какой-нибудь способ попросить кристал как-то иначе сджойнить 3 запроса?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
X:\DATA\AKCIONER\DATA\AKC_DVD.DBC
SELECT
lic.kod AS lic_id,
speriod.kod AS kodsperiod,
akc.date_act AS date_act_akc,
MAX(lic.name) AS name,
MAX(NVL(speriod.name, "Не определен период начисления дивидендов")) AS namesperiod,
SUM(akc.kol_akc) AS kol_akc,
SUM(akc.sum_dvd) AS sum_dvd,
SUM(akc.sum_nlg) AS sum_nlg,
SUM(akc.summa) AS summa
FROM akc_dvd!lic
INNER JOIN akc_dvd!akc
ON lic.kod = akc.lic_id
INNER JOIN akc_dvd!speriod
ON akc.date_act = speriod.date_act_akc
WHERE ALLTRIM(lic.pers_id) == "Ф" AND speriod.kod IN ({?speriodlist_})
GROUP BY 1 , 2 , 3
ORDER BY 3 , 4
EXTERNAL JOIN curNachAkcDvd.lic_id={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curVedAkcDvd.lic_id} AND curNachAkcDvd.kodsperiod={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curVedAkcDvd.kodsperiod}
X:\DATA\AKCIONER\DATA\AKC_DVD.DBC
SELECT
Svedkass.lic_id,
speriod.kod AS kodsperiod,
Vedkass.date_act_akc,
Vedkass.kodhddoc,
SUM(Svedkass.summa) AS summa
FROM akc_dvd!vedkass
INNER JOIN akc_dvd!svedkass
ON Vedkass.kod = Svedkass.vedkass_id AND Svedkass.nepoluchil = .F.
INNER JOIN akc_dvd!speriod
ON Vedkass.date_act_akc = speriod.date_act_akc
WHERE vedkass.kodhddoc > 0
GROUP BY 1 , 2 , 3 , 4
EXTERNAL JOIN curVedAkcDvd.lic_id={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curNachAkcDvd.lic_id} AND curVedAkcDvd.kodsperiod={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curNachAkcDvd.kodsperiod} AND curVedAkcDvd.kodhddoc={?PostgreSQL 8 Unicode: curVedPlat.kod}
PostgreSQL 8 Unicode
SELECT
hddoc.kod,
hddoc.snumber,
(CASE WHEN TRIM(COALESCE(hddoc.snumber, '0')) <> '' THEN coalesce(to_number(hddoc.snumber,'999999999.99'), 0 ) ELSE '0' END)::numeric( 15 , 2 ) AS nnumber,
hddoc.begdata,
hdpldoc.kod AS kodhdpldoc,
hdpldoc.summa::numeric( 20 , 2 ) AS summa,
(CASE WHEN hddoc.kodtype = 64 THEN 'р/с' WHEN hddoc.kodtype = 109 THEN 'касса' ELSE '' END)::char( 5 ) AS sposobvipl,
hdpldoc.debet,
hdpldoc.kredit
FROM hddoc
INNER JOIN hdpldoc
ON hddoc.kod = hdpldoc.kodhddoc
WHERE hddoc.kodtype IN ( 64 , 109 )
AND hddoc.begdata BETWEEN {?minendsperiod_} AND {?_enddate}
ORDER BY hddoc.begdata, nnumber
EXTERNAL JOIN curVedPlat.kod={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curVedAkcDvd.kodhddoc}
|
|
|