Giriş

SQL Server'da Sorgu Performansını İyileştirme

Dean Smith

Founder, Atamai Analytics

Depremler veritabanı

Depremler Veritabanı

SQL Server'da Sorgu Performansını İyileştirme

NBA Sezonu 2017-2018 veritabanı

NBA Sezonu 2017-2018 veritabanı

SQL Server'da Sorgu Performansını İyileştirme

Müşteri Siparişleri veritabanı

Müşteri Siparişleri veritabanı

SQL Server'da Sorgu Performansını İyileştirme

Okuması kolay mı?

Select ps.Team, count(p.PlayerName) 
As NonNthAmerPlayers from 
 PlayerStats ps inner 
join (select PlayerName FROM Players 
    WHERE Country <> 'USA' Or Country 
 <> 'Canada' ) 
 p on p.PlayerName = ps.PlayerName 
 group BY ps.Team
having Count(p.PlayerName) 
>=24 Order by NonNthAmerPlayers desc
Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
SQL Server'da Sorgu Performansını İyileştirme

Öneriler

  • Tutarlı olun
  • Tüm SQL sözdizimi için BÜYÜK HARF kullanın
  • Her ana işlem sözdizimi için yeni satır açın: SELECT, FROM, WHERE vb.
  • Kodu girintileyin:
    • Alt sorgular
    • ON ifadeleri
    • AND/OR koşulları
    • Uzun tek satırlardan kaçınmak için, ör. birden çok sütun adı
  • Sorguyu noktalı virgülle (;) bitirin
  • Gerekirse AS ile takma ad kullanın
SQL Server'da Sorgu Performansını İyileştirme

Çok daha iyi...

Önce

Select ps.Team, count(p.PlayerName) 
As NonNthAmerPlayers from 
 PlayerStats ps inner 
join (select PlayerName FROM Players 
    WHERE Country <> 'USA' Or Country 
 <> 'Canada' ) 
 p on p.PlayerName = ps.PlayerName 
 group BY ps.Team
having Count(p.PlayerName) 
>=24 Order by NonNthAmerPlayers desc

Sonra

SELECT ps.Team, 
    COUNT(p.PlayerName) NonNthAmerPlayers
FROM PlayerStats ps
INNER JOIN
        (SELECT PlayerName 
         FROM Players 
         WHERE Country <> 'USA'
                OR Country <> 'Canada' ) p
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
ORDER BY NonNthAmerPlayers DESC;
SQL Server'da Sorgu Performansını İyileştirme

Blokları yorumlama

/* 
Kadrosunda Kuzey Amerika dışından 24 veya daha fazla oyuncu olan NBA takımlarını döndürür.
*/

SELECT ps.Team, COUNT(p.PlayerName) NonNthAmerPlayers FROM PlayerStats ps INNER JOIN (SELECT PlayerName FROM Players WHERE Country <> 'USA' OR Country <> 'Canada' ) p ON p.PlayerName = ps.PlayerName GROUP BY ps.Team HAVING COUNT(p.PlayerName) >=24 ORDER BY NonNthAmerPlayers DESC;

Kod veya metin bloğunu yorumlamak için /* ve */ kullanın

SQL Server'da Sorgu Performansını İyileştirme

Blokları yorumlama

/* 
Kadrosunda Kuzey Amerika dışından 24 veya daha fazla oyuncu olan NBA takımlarını döndürür.
*/

SELECT ps.Team, COUNT(p.PlayerName) NonNthAmerPlayers FROM PlayerStats ps INNER JOIN (SELECT PlayerName FROM Players WHERE Country <> 'USA' OR Country <> 'Canada' ) p ON p.PlayerName = ps.PlayerName GROUP BY ps.Team HAVING COUNT(p.PlayerName) >=24 ORDER BY NonNthAmerPlayers DESC;

Kod veya metin satırını yorumlamak için -- kullanın

Team NonNthAmerPlayers
HOU 24
LAL 24
MEM 24
MIL 24
SQL Server'da Sorgu Performansını İyileştirme

Satırları yorumlama

Kod veya metin satırını yorumlamak için -- kullanın

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;
SQL Server'da Sorgu Performansını İyileştirme

Satırları yorumlama

Kod veya metin satırını yorumlamak için -- kullanın

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Oyuncu sayısı
FROM PlayerStats ps

INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Girintili alt sorgu
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24

ORDER BY NonNthAmerPlayers DESC;

 

  • Yeni sütunun oyuncu sayısı olduğunu belirten yorum

 

  • Alt sorgunun girintilendiğini belirten yorum
SQL Server'da Sorgu Performansını İyileştirme

Satırları yorumlama

Kod veya metin satırını yorumlamak için -- kullanın

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Oyuncu sayısı
FROM PlayerStats ps
-- Inner join burada başlar
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Girintili alt sorgu
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24
-- ORDER BY'ı kaldırın, gerekli değil
ORDER BY NonNthAmerPlayers DESC;

 

 

  • INNER JOIN öncesinde bir ayrım işaretleyen yorum

 

 

  • ORDER BY gerekliliği hakkında yorum
SQL Server'da Sorgu Performansını İyileştirme

Satırları yorumlama

Kod veya metin satırını yorumlamak için -- kullanın

SELECT ps.Team, 
  COUNT(p.PlayerName) NonNthAmerPlayers -- Oyuncu sayısı
FROM PlayerStats ps
-- Inner join burada başlar
INNER JOIN 
    (SELECT PlayerName 
     FROM Players 
     WHERE Country <> 'USA'
        OR Country <> 'Canada' ) p -- Girintili alt sorgu
    ON p.PlayerName = ps.PlayerName
GROUP BY ps.Team
HAVING COUNT(p.PlayerName) >=24;
-- ORDER BY'ı kaldırın, gerekli değil
-- ORDER BY NonNthAmerPlayers DESC

 

 

 

 

 

 

  • ORDER BY ifadesi yorum satırına alındı
SQL Server'da Sorgu Performansını İyileştirme

Vamos praticar!

SQL Server'da Sorgu Performansını İyileştirme

Preparing Video For Download...