Witam,
Zwracam się z ogromną prośbą o sprawdzenie poniższego kodu SQL i udzielenie pomocy w jego optymalizacji - czy jest w ogóle taka możliwość?
Czy da się to napisać bardziej optymalnie - zarówno w kontekście wydajności jak również długości tekstu. Jest to tylko fragment zapytania, który stworzyłem a mam ograniczoną liczbę znaków w programie w którym je umieszczę i mam małe obawy, że mogę się nie wyrobić :-/.
Niestety SQL nie jest moją mocną stroną.
SELECT SUM(DeK_Kwota) FROM CDN_Testowa.CDN.DekretyKonta WHERE DeK_Strona = 1 AND DeK_DataDok <=
(SELECT EDN_DataOpe FROM [CDN_Testowa].[CDN].[EwidDodNag] WHERE EDN_NumerPelny = 'EDK/1/2015')
AND DeK_AccId = (
SELECT Acc_AccId FROM CDN_Testowa.CDN.Konta WHERE Acc_Numer = (
SELECT Kat_KontoSegmentWN FROM CDN_Testowa.CDN.Kategorie WHERE Kat_KatID = (
SELECT EDN_KatID FROM [CDN_Testowa].[CDN].[EwidDodNag] WHERE EDN_NumerPelny = 'EDK/1/2015'))
AND Acc_OObId = (
SELECT OOb_OObID FROM CDN_Testowa.CDN.OkresyObrach WHERE OOb_DataOtw <= (
SELECT EDN_DataOpe FROM [CDN_Testowa].[CDN].[EwidDodNag] WHERE EDN_NumerPelny = 'EDK/1/2015')
AND OOb_DataKoncowa >= (
SELECT EDN_DataOpe FROM [CDN_Testowa].[CDN].[EwidDodNag] WHERE EDN_NumerPelny = 'EDK/1/2015')))
Głównie chodzi o to czy da się jakoś ograniczyć te zapytania - np. gdy w ostatniej linijce porównuję czas czy nie jest >= lub <= to tworzę dwa podzapytania z tej samej tabeli no i zastanawiam się czy nie dałoby się tego zrobić jednym zapytaniem?
Mam nadzieję, że wszystko jest czytelne (wcięcia odnoszą się do kolejnego podzapytania).
Aha, i ten numer 'EDK/1/2015' to tylko przykładowy string w celu sprawdzenia czy zapytanie działa - później zostanie zmieniony na zmienną.
No i oczywiście pomijam kwestię wyrzucenia nawiasów kwadratowych, które w tym przypadku są zbędne.
Z góry bardzo dziękuję za wszelką pomoc.