SlideShare ist ein Scribd-Unternehmen logo
1 von 12
SQL ≠ 
SQL żyje i ma się dobrze 
Bardzo krótki przewodnik po wbeosrst tp praracctitsiseess w w M MSS S SQQLL
SELECT ≠ 
SELECT * to zwykle nie jest dobry pomysł. 
• Znaj nazwy kolumn. 
• Pobieraj tylko niezbędne dane. 
• Pamiętaj o indeksach. 
• TOP może się przydać. 
• …albo SET ROWCOUNT.
WHERE ≠ 
WHERE nie jest ozdobą. 
• Używaj warunków w celu ograniczenia ilości pobieranych 
danych. 
• Konstruuj warunki tak aby poprawnie korzystały z indeksów. 
• …lub twórz indeksy tak aby wspomagały warunki. 
• Porównując daty, nie korzystaj z funkcji niedeterministycznych. 
SELECT * FROM tabela WHERE 
DataUtworzenia >= `2014-09-01T00:00:00’ AND DataUtworzenia < `2014-09-01T00:00:00’ 
YEAR(DataUtworzenia) = 2014 AND MONTH(DataUtworzenia) = 9
JOIN ≠ .Join() 
JOIN to nie .Join(…). 
No, nie tylko. 
• Poznaj różnice między rodzajami złączeń. 
• Korzystaj ze złączeń w zapytaniach 
SELECT A.A.Id 
Id 
FROM A 
LEFT JOIN B ON A.Id = B.Id 
WHERE B.Id IS NOT NULL 
poprawnie i świadomie. 
FROM A 
INNER JOIN B ON A.Id = B.Id 
• Nie zapominaj o CROSS JOIN. 
• Nie zawsze JOIN jest wydajniejszy od podzapytania!
INT ≠ VARCHAR 
Typy danych są ważne. I różne. 
• Pamiętaj żeby dane przechowywać w polach o odpowiednich 
typach. 
• Ograniczaj wielkość pól do realnych wartości. 
• W zapytaniach używaj parametrów odpowiedniego typu. 
SELECT * FROM A WHERE Id = '1234' 
SELECT * FROM A WHERE Id = 1234
NF ≠ 
Normalizacja to nie wiedza akademicka. 
• Przemyśl i zaplanuj struktury danych przed implementacją. 
• Używaj kluczy obcych. 
• Pamiętaj, że normalizacja służy „eliminacji redundancji danych 
przy jednoczesnym zapewnieniu ich spójności”, co 
niekoniecznie przekłada się na wydajność. 
• …więc po co o niej wspominam?
deNF ≠ 
Denormalizacja to nie zuoooo 
…w niektórych przypadkach. 
• W uzasadnionych przypadkach pozwól sobie na redundancję 
danych. 
• …ale żeby bazę zdenormalizować, to najpierw powinna być 
znormalizowana!  
• Denormalizacja nie może być uzasadnieniem bur bałaganu w 
bazie.
Indeks ≠ 
Indeksy to nic strasznego. 
• Nie twórz indeksów rozbudowanych ponad potrzeby. 
• Pamiętaj, że klucz obcy to nie indeks. 
• Naucz się korzystać z narzędzi optymalizacyjnych. 
• Widoki też można indeksować 
• Dowiedz się co to jest indeks kryjący. 
• Nie każdy indeks ma sens. 
pod pewnymi warunkami.
Procedura ≠ SELECT 
Procedura to nie to samo co zwykły SELECT 
(chociaż może nim być). 
• Korzystaj z procedur do wieloetapowego przetwarzania dużej ilości 
danych. 
• Pamiętaj, że nie zawsze zwykłe zapytanie jest lepsze od procedury. 
• ...ale też nie zawsze procedura jest lepsza od zwykłego zapytania. 
• Uważaj na „parameter sniffing”. 
• …również przy zwykłych SELECTach. 
• Unikaj kursorów 
, zwłaszcza jeżeli są wymówką dla braku znajomości SQL.
Transakcja ≠ 
Transakcja to nie jest niepotrzebny bagaż. 
• Korzystaj z transakcji. 
• …tam, gdzie jest to potrzebne! 
• Obejmuj transakcją tylko kluczowy fragment zapytania. 
• Pamiętaj o ustawieniu odpowiedniego poziomu izolacji 
transakcji.
Inne, też ważne 
W skrócie 
• Pamiętaj o hintach typu LOCK. 
• Znaj różnicę między tablicą tymczasową a zmienną tabelaryczną. 
• …i pomiędzy tymi strukturami a CTE. 
• Naucz się korzystać z MERGE 
• …oraz OUTPUT 
• …oraz ROW_NUMBER() OVER (ORDER BY…) 
• MYŚL!
Baza ≠ 
Baza danych to nie niewzruszona struktura. 
• Weryfikuj zapytania w miarę przyrostu ilości danych. 
• Optymalizuj indeksy. 
• Odświeżaj statystyki. 
• Och, no po prostu zadbaj trochę o bazę danych, ok?

Weitere ähnliche Inhalte

Andere mochten auch

Coaching zespołu projektowego, jako  sposób wspierania organizacji uczącej się
Coaching zespołu projektowego, jako  sposób wspierania organizacji uczącej sięCoaching zespołu projektowego, jako  sposób wspierania organizacji uczącej się
Coaching zespołu projektowego, jako  sposób wspierania organizacji uczącej sięmagda3695
 
A rnav infomeet
A rnav infomeetA rnav infomeet
A rnav infomeetmagda3695
 
физика и техника. Стрельников Илья 7а
физика и техника. Стрельников Илья 7афизика и техника. Стрельников Илья 7а
физика и техника. Стрельников Илья 7аGusstrik
 
Big data today and tomorrow
Big data today and tomorrowBig data today and tomorrow
Big data today and tomorrowmagda3695
 
Dług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemyDług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemymagda3695
 
Csec 2010 jun_social_studies_sr
Csec 2010 jun_social_studies_srCsec 2010 jun_social_studies_sr
Csec 2010 jun_social_studies_srxavennesia
 
Schoolmaster Crm для школ, курсов, тренингов и учебных центров
Schoolmaster Crm для школ, курсов, тренингов и учебных центровSchoolmaster Crm для школ, курсов, тренингов и учебных центров
Schoolmaster Crm для школ, курсов, тренингов и учебных центровDavid Pantsoulaya
 
Antal international prezentacja_targi_it
Antal international prezentacja_targi_itAntal international prezentacja_targi_it
Antal international prezentacja_targi_itmagda3695
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected worldmagda3695
 
Job Satisfaction In BSNL
Job Satisfaction In BSNLJob Satisfaction In BSNL
Job Satisfaction In BSNLSai Kumar B
 

Andere mochten auch (10)

Coaching zespołu projektowego, jako  sposób wspierania organizacji uczącej się
Coaching zespołu projektowego, jako  sposób wspierania organizacji uczącej sięCoaching zespołu projektowego, jako  sposób wspierania organizacji uczącej się
Coaching zespołu projektowego, jako  sposób wspierania organizacji uczącej się
 
A rnav infomeet
A rnav infomeetA rnav infomeet
A rnav infomeet
 
физика и техника. Стрельников Илья 7а
физика и техника. Стрельников Илья 7афизика и техника. Стрельников Илья 7а
физика и техника. Стрельников Илья 7а
 
Big data today and tomorrow
Big data today and tomorrowBig data today and tomorrow
Big data today and tomorrow
 
Dług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemyDług technologiczny czyli mały wkład w duże problemy
Dług technologiczny czyli mały wkład w duże problemy
 
Csec 2010 jun_social_studies_sr
Csec 2010 jun_social_studies_srCsec 2010 jun_social_studies_sr
Csec 2010 jun_social_studies_sr
 
Schoolmaster Crm для школ, курсов, тренингов и учебных центров
Schoolmaster Crm для школ, курсов, тренингов и учебных центровSchoolmaster Crm для школ, курсов, тренингов и учебных центров
Schoolmaster Crm для школ, курсов, тренингов и учебных центров
 
Antal international prezentacja_targi_it
Antal international prezentacja_targi_itAntal international prezentacja_targi_it
Antal international prezentacja_targi_it
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected world
 
Job Satisfaction In BSNL
Job Satisfaction In BSNLJob Satisfaction In BSNL
Job Satisfaction In BSNL
 

Mehr von magda3695

Prezentacja personal branding
Prezentacja personal brandingPrezentacja personal branding
Prezentacja personal brandingmagda3695
 
Patterns for organic architecture codedive
Patterns for organic architecture codedivePatterns for organic architecture codedive
Patterns for organic architecture codedivemagda3695
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous deliverymagda3695
 
Szczepan Faber mockito story (1)
Szczepan Faber   mockito story (1)Szczepan Faber   mockito story (1)
Szczepan Faber mockito story (1)magda3695
 
Sea surfing in asp.net mvc
Sea surfing in asp.net mvcSea surfing in asp.net mvc
Sea surfing in asp.net mvcmagda3695
 
Szczepan.faber.gradle
Szczepan.faber.gradleSzczepan.faber.gradle
Szczepan.faber.gradlemagda3695
 
Info meet katalog kraków 8 marca
Info meet katalog kraków 8 marcaInfo meet katalog kraków 8 marca
Info meet katalog kraków 8 marcamagda3695
 
Soft layer cloud without compromise
Soft layer   cloud without compromiseSoft layer   cloud without compromise
Soft layer cloud without compromisemagda3695
 
Agile zrobtosam infomeet
Agile zrobtosam infomeetAgile zrobtosam infomeet
Agile zrobtosam infomeetmagda3695
 
Abc zarządzania sobą
Abc zarządzania sobąAbc zarządzania sobą
Abc zarządzania sobąmagda3695
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected worldmagda3695
 
Prezentacja v2(1)
Prezentacja v2(1)Prezentacja v2(1)
Prezentacja v2(1)magda3695
 
Zmiana pracy mariola zieba antal
Zmiana pracy   mariola zieba antalZmiana pracy   mariola zieba antal
Zmiana pracy mariola zieba antalmagda3695
 
Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]magda3695
 
Big data ecosystem
Big data ecosystemBig data ecosystem
Big data ecosystemmagda3695
 
Przychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usabilityPrzychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usabilitymagda3695
 

Mehr von magda3695 (18)

Prezentacja personal branding
Prezentacja personal brandingPrezentacja personal branding
Prezentacja personal branding
 
Patterns for organic architecture codedive
Patterns for organic architecture codedivePatterns for organic architecture codedive
Patterns for organic architecture codedive
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
 
Szczepan Faber mockito story (1)
Szczepan Faber   mockito story (1)Szczepan Faber   mockito story (1)
Szczepan Faber mockito story (1)
 
Sea surfing in asp.net mvc
Sea surfing in asp.net mvcSea surfing in asp.net mvc
Sea surfing in asp.net mvc
 
Szczepan.faber.gradle
Szczepan.faber.gradleSzczepan.faber.gradle
Szczepan.faber.gradle
 
Info meet katalog kraków 8 marca
Info meet katalog kraków 8 marcaInfo meet katalog kraków 8 marca
Info meet katalog kraków 8 marca
 
Soft layer cloud without compromise
Soft layer   cloud without compromiseSoft layer   cloud without compromise
Soft layer cloud without compromise
 
Agile zrobtosam infomeet
Agile zrobtosam infomeetAgile zrobtosam infomeet
Agile zrobtosam infomeet
 
Abc zarządzania sobą
Abc zarządzania sobąAbc zarządzania sobą
Abc zarządzania sobą
 
Akamai in a hyperconnected world
Akamai in a hyperconnected worldAkamai in a hyperconnected world
Akamai in a hyperconnected world
 
Prezentacja v2(1)
Prezentacja v2(1)Prezentacja v2(1)
Prezentacja v2(1)
 
Zmiana pracy mariola zieba antal
Zmiana pracy   mariola zieba antalZmiana pracy   mariola zieba antal
Zmiana pracy mariola zieba antal
 
Ibm
IbmIbm
Ibm
 
Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]Hostingowe i domenowe pułapki [97 2003]
Hostingowe i domenowe pułapki [97 2003]
 
Big data ecosystem
Big data ecosystemBig data ecosystem
Big data ecosystem
 
Scala
ScalaScala
Scala
 
Przychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usabilityPrzychodzi baba do lekarza na badania usability
Przychodzi baba do lekarza na badania usability
 

Prezentacja 20141129

  • 1. SQL ≠ SQL żyje i ma się dobrze Bardzo krótki przewodnik po wbeosrst tp praracctitsiseess w w M MSS S SQQLL
  • 2. SELECT ≠ SELECT * to zwykle nie jest dobry pomysł. • Znaj nazwy kolumn. • Pobieraj tylko niezbędne dane. • Pamiętaj o indeksach. • TOP może się przydać. • …albo SET ROWCOUNT.
  • 3. WHERE ≠ WHERE nie jest ozdobą. • Używaj warunków w celu ograniczenia ilości pobieranych danych. • Konstruuj warunki tak aby poprawnie korzystały z indeksów. • …lub twórz indeksy tak aby wspomagały warunki. • Porównując daty, nie korzystaj z funkcji niedeterministycznych. SELECT * FROM tabela WHERE DataUtworzenia >= `2014-09-01T00:00:00’ AND DataUtworzenia < `2014-09-01T00:00:00’ YEAR(DataUtworzenia) = 2014 AND MONTH(DataUtworzenia) = 9
  • 4. JOIN ≠ .Join() JOIN to nie .Join(…). No, nie tylko. • Poznaj różnice między rodzajami złączeń. • Korzystaj ze złączeń w zapytaniach SELECT A.A.Id Id FROM A LEFT JOIN B ON A.Id = B.Id WHERE B.Id IS NOT NULL poprawnie i świadomie. FROM A INNER JOIN B ON A.Id = B.Id • Nie zapominaj o CROSS JOIN. • Nie zawsze JOIN jest wydajniejszy od podzapytania!
  • 5. INT ≠ VARCHAR Typy danych są ważne. I różne. • Pamiętaj żeby dane przechowywać w polach o odpowiednich typach. • Ograniczaj wielkość pól do realnych wartości. • W zapytaniach używaj parametrów odpowiedniego typu. SELECT * FROM A WHERE Id = '1234' SELECT * FROM A WHERE Id = 1234
  • 6. NF ≠ Normalizacja to nie wiedza akademicka. • Przemyśl i zaplanuj struktury danych przed implementacją. • Używaj kluczy obcych. • Pamiętaj, że normalizacja służy „eliminacji redundancji danych przy jednoczesnym zapewnieniu ich spójności”, co niekoniecznie przekłada się na wydajność. • …więc po co o niej wspominam?
  • 7. deNF ≠ Denormalizacja to nie zuoooo …w niektórych przypadkach. • W uzasadnionych przypadkach pozwól sobie na redundancję danych. • …ale żeby bazę zdenormalizować, to najpierw powinna być znormalizowana!  • Denormalizacja nie może być uzasadnieniem bur bałaganu w bazie.
  • 8. Indeks ≠ Indeksy to nic strasznego. • Nie twórz indeksów rozbudowanych ponad potrzeby. • Pamiętaj, że klucz obcy to nie indeks. • Naucz się korzystać z narzędzi optymalizacyjnych. • Widoki też można indeksować • Dowiedz się co to jest indeks kryjący. • Nie każdy indeks ma sens. pod pewnymi warunkami.
  • 9. Procedura ≠ SELECT Procedura to nie to samo co zwykły SELECT (chociaż może nim być). • Korzystaj z procedur do wieloetapowego przetwarzania dużej ilości danych. • Pamiętaj, że nie zawsze zwykłe zapytanie jest lepsze od procedury. • ...ale też nie zawsze procedura jest lepsza od zwykłego zapytania. • Uważaj na „parameter sniffing”. • …również przy zwykłych SELECTach. • Unikaj kursorów , zwłaszcza jeżeli są wymówką dla braku znajomości SQL.
  • 10. Transakcja ≠ Transakcja to nie jest niepotrzebny bagaż. • Korzystaj z transakcji. • …tam, gdzie jest to potrzebne! • Obejmuj transakcją tylko kluczowy fragment zapytania. • Pamiętaj o ustawieniu odpowiedniego poziomu izolacji transakcji.
  • 11. Inne, też ważne W skrócie • Pamiętaj o hintach typu LOCK. • Znaj różnicę między tablicą tymczasową a zmienną tabelaryczną. • …i pomiędzy tymi strukturami a CTE. • Naucz się korzystać z MERGE • …oraz OUTPUT • …oraz ROW_NUMBER() OVER (ORDER BY…) • MYŚL!
  • 12. Baza ≠ Baza danych to nie niewzruszona struktura. • Weryfikuj zapytania w miarę przyrostu ilości danych. • Optymalizuj indeksy. • Odświeżaj statystyki. • Och, no po prostu zadbaj trochę o bazę danych, ok?