50 najpopularniejsze pytania i odpowiedzi na rozmowie kwalifikacyjnej T-SQL (2026)

Przygotowujesz siฤ do rozmowy kwalifikacyjnej T-SQL? Czas pogลฤbiฤ swojฤ
wiedzฤ na temat tego, jak bazy danych naprawdฤ dziaลajฤ
pod powierzchniฤ
. Pytania do rozmowy kwalifikacyjnej T-SQLRekruterzy oceniajฤ
nie tylko znajomoลฤ skลadni, ale takลผe umiejฤtnoลฤ manipulowania danymi, ich optymalizacji i logicznego strukturyzowania.
Moลผliwoลci w tej dziedzinie stale rosnฤ
, poniewaลผ firmy polegajฤ
na wnioskach opartych na danych. Kandydaci z silnฤ
wiedzฤ
technicznฤ
, umiejฤtnoลciami analitycznymi i umiejฤtnoลciฤ
rozwiฤ
zywania rzeczywistych problemรณw wyrรณลผniajฤ
siฤ โ zarรณwno nowicjusze, jak i specjaliลci z 5โ10-letnim doลwiadczeniem. Zrozumienie pytaล i odpowiedzi na poziomie podstawowym i zaawansowanym pomaga liderom zespoลรณw, menedลผerom i starszym pracownikom technicznym zidentyfikowaฤ silne umiejฤtnoลci SQL i doลwiadczenie na poziomie podstawowym.
Nasz przewodnik powstaล w oparciu o spostrzeลผenia ponad 65 menedลผerรณw ds. rekrutacji, ponad 40 starszych programistรณw i specjalistรณw ds. danych z rรณลผnych branลผ, zapewniajฤ
c kompleksowy zakres zagadnieล โ od podstawowej logiki SQL po zaawansowane techniki optymalizacji, ktรณrym ufajฤ
liderzy techniczni na caลym ลwiecie. Czytaj wiฤcej ...
Najwaลผniejsze pytania i odpowiedzi na rozmowie kwalifikacyjnej dotyczฤ ce jฤzyka T-SQL
1) Czym jest T-SQL i czym rรณลผni siฤ od standardowego SQL?
Transact-SQL (T-SQL) to Microsoftzastrzeลผone rozszerzenie jฤzyka SQL, uลผywane gลรณwnie z Microsoft SQL ServerRozszerza standardowy SQL poprzez wprowadzenie funkcji programowania proceduralnego, takich jak zmienne, warunki, pฤtle, obsลuga bลฤdรณw i funkcje wbudowane. Podczas gdy standardowy SQL koncentruje siฤ na manipulacji danymi (SELECT, INSERT, UPDATE, DELETE), T-SQL obsลuguje instrukcje sterowania przepลywem (IFโฆELSE, WHILE), obsลugฤ transakcji oraz funkcje systemowe, ktรณre umoลผliwiajฤ programistom pisanie zลoลผonych skryptรณw.
| WYGLฤD | SQL | T-SQL |
|---|---|---|
| Wลasnoลฤ | Norma ANSI/ISO | Microsoft |
| Logika proceduralna | Ograniczony | Obsลugiwane (zmienne, pฤtle) |
| Obsลuga bลฤdรณw | minimalny | TRYโฆCATCH obsลugiwany |
| Pierwsze uลผycie | Ogรณlne bazy danych | SQL Server |
Przykลad:
DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
PRINT @count;
SET @count -= 1;
END;
2) Wyjaลnij rรณลผne typy poลฤ czeล w jฤzyku T-SQL na przykลadach.
Zลฤ czenia w jฤzyku T-SQL ลฤ czฤ wiersze z dwรณch lub wiฤcej tabel na podstawie powiฤ zanych kolumn. Zrozumienie ich typรณw jest kluczowe w przypadku zapytaล dotyczฤ cych danych relacyjnych.
| Typ poลฤ czenia | OPIS | Przykลadowa skลadnia |
|---|---|---|
| INNER JOIN | Zwraca tylko pasujฤ ce wiersze | SELECT * FROM A INNER JOIN B ON A.id = B.id; |
| LEFT JOIN | Wszystko od lewej + pasujฤ ce od prawej | SELECT * FROM A LEFT JOIN B ON A.id = B.id; |
| WลAลCIWE DOลฤCZENIE | Wszystko od prawej + pasujฤ ce od lewej | SELECT * FROM A RIGHT JOIN B ON A.id = B.id; |
| PEลNE DOลฤCZENIE | ลฤ czy LEWฤ + PRAWฤ | SELECT * FROM A FULL JOIN B ON A.id = B.id; |
| KRZYลป DOลฤCZ | Produkt kartezjaลski | SELECT * FROM A CROSS JOIN B; |
Praktyczny przykลad: ลฤ
czฤ
cy Orders oraz Customers aby dowiedzieฤ siฤ, ktรณrzy klienci zลoลผyli zamรณwienia za pomocฤ
INNER JOIN.
3) Czym sฤ wyraลผenia CTE (Common Table Expressions) i jakie sฤ ich zalety?
Wspรณlny zestaw tabelaryczny (CTE) zapewnia tymczasowy nazwany zestaw wynikรณw, do ktรณrego moลผna odwoลywaฤ siฤ w SELECT, INSERT, UPDATElub DELETE oลwiadczenie. Poprawia czytelnoลฤ i upraszcza zapytania rekurencyjne.
Zalety:
- Poprawia przejrzystoลฤ i konserwacjฤ zapytaล.
- Wลฤ cza rekurencjฤ (dla danych hierarchicznych, takich jak schematy organizacyjne).
- Pomaga uniknฤ ฤ powtarzajฤ cych siฤ podzapytaล.
- Zwiฤksza moduลowoลฤ w duลผych skryptach.
Przykลad:
WITH EmployeeCTE AS (
SELECT EmpID, EmpName, ManagerID
FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;
4) Czym rรณลผniฤ siฤ tabele tymczasowe i zmienne tabelowe w jฤzyku T-SQL?
Oba sลuลผฤ do przechowywania wynikรณw poลrednich, ale ich zachowanie i zakres rรณลผniฤ siฤ znaczฤ co.
| Cecha | Tabela tymczasowa (#Temp) |
Zmienna tabeli (@TableVar) |
|---|---|---|
| Przechowywane w | TempDB | Pamiฤฤ (z ograniczonym wykorzystaniem TempDB) |
| Zakres transakcyjny | ลledzi transakcje | Niezaleลผny od transakcji |
| Indeksy | Utrzymany | Ograniczony |
| Wydajnoลฤ | Lepiej dla duลผych zestawรณw danych | Lepiej dla maลych zestawรณw danych |
Przykลad:
DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50)); INSERT INTO @TableVar VALUES (1, 'Alice');
Uลผywaj tabel tymczasowych podczas pracy z duลผymi zbiorami danych lub gdy wymagane sฤ indeksy.
5) Wyjaลnij koncepcjฤ transakcji w jฤzyku T-SQL i ich cykl ลผycia.
Transakcja w jฤzyku T-SQL zapewnia, ลผe โโsekwencja operacji jest wykonywana jako pojedyncza jednostka logiczna. Cykl ลผycia obejmuje: ROZPOCZNIJ TRANSAKCJฤ, POPEลNIฤ, COFNIฤCIE.
| STAGE | OPIS |
|---|---|
| ROZPOCZNIJ TRANSAKCJฤ | Rozpoczyna transakcjฤ |
| ZATWIERDลน TRANSAKCJฤ | Zapisuje wszystkie zmiany na staลe |
| WYCOFANIE TRANSAKCJI | Cofa wszystkie operacje od ostatniego BEGIN |
Przykลad:
BEGIN TRANSACTION; UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1; UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2; COMMIT TRANSACTION;
Jeลผeli w trakcie wystฤ
pi bลฤ
d, ROLLBACK zachowuje integralnoลฤ danych.
6) Jaka jest rรณลผnica pomiฤdzy poleceniami DELETE, TRUNCATE i DROP?
| Command | Funkcjonowaฤ | Wycofywanie | Wpลywa na strukturฤ | Prฤdkoลฤ |
|---|---|---|---|---|
| DELETE | Usuwa okreลlone wiersze | Tak | Nie | Wolniej |
| ลCIฤTY | Usuwa wszystkie wiersze | Nie (zwykle) | Nie | pompatycznoลฤ |
| DROP | Usuwa caลฤ tabelฤ | Nie | Tak | Najszybszy |
Przykลad:
DELETE FROM Employees WHERE Department = 'HR'; TRUNCATE TABLE TempData; DROP TABLE OldLogs;
Zastosowanie DELETE do selektywnego usuwania, TRUNCATE do czyszczenia i DROP aby caลkowicie usunฤ
ฤ tabelฤ.
7) Jak dziaลa obsลuga bลฤdรณw w jฤzyku T-SQL?
Jฤzyk T-SQL zapewnia ustrukturyzowanฤ
obsลugฤ bลฤdรณw poprzez TRY...CATCH blok, umoลผliwiajฤ
cy programistom sprawne zarzฤ
dzanie bลฤdami w czasie wykonywania.
Przykลad:
BEGIN TRY
INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;
To podejลcie izoluje wadliwฤ
operacjฤ i zapobiega naruszeniu integralnoลci danych przez transakcjฤ. Programiลci mogฤ
rรณwnieลผ uzyskaฤ dostฤp do funkcji systemu, takich jak ERROR_NUMBER() or ERROR_SEVERITY() do celรณw diagnostycznych.
8) Jakie sฤ rรณลผne sposoby optymalizacji wydajnoลci zapytaล T-SQL?
Optymalizacja obejmuje precyzyjne dostrajanie projektu SQL, indeksowania i strategii wykonywania.
Kluczowe techniki:
- Zastosowanie wลaลciwe indeksowanie w czฤsto wyszukiwanych kolumnach.
- Uniknฤ
ฤ
SELECT *โ wyraลบnie okreลl kolumny. - Zastosowanie operacje oparte na zbiorach zamiast kursorรณw.
- Analizuj plany wykonania przy uลผyciu SQL Server Management Studio.
- Zastosowanie ลฤ czy siฤ wydajnie przy odpowiednich warunkach ON.
- Zredukowaฤ zagnieลผdลผone podzapytania; preferuj CTE lub tabele tymczasowe.
Dostrajanie wydajnoลci w jฤzyku T-SQL obejmuje rรณwnieลผ monitorowanie statystyk wykonywania zapytaล za pomocฤ
SET STATISTICS IO ON.
9) Czym sฤ funkcje okna i kiedy naleลผy ich uลผywaฤ?
Funkcje okienkowe wykonujฤ obliczenia na zestawie wierszy powiฤ zanych z bieลผฤ cym wierszem, bez ลฤ czenia ich w jeden wynik. Sฤ przydatne do tworzenia rankingรณw, sum bieลผฤ cych i ลrednich kroczฤ cych.
Przykลad:
SELECT
EmployeeID,
Salary,
RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;
Typowe funkcje obejmujฤ
: RANK(), ROW_NUMBER(), DENSE_RANK(), SUM() OVER().
Sฤ one szczegรณlnie waลผne w przypadku obciฤ ลผeล analitycznych, w ktรณrych potrzebne sฤ zarรณwno dane zagregowane, jak i dane na poziomie wierszy.
10) Wyjaลnij rรณลผnicฤ miฤdzy indeksami klastrowymi i nieklastrowymi.
| Cecha | Clusterwyd. Indeks | Nie-Clusterwyd. Indeks |
|---|---|---|
| Przechowywanie danych | Fizycznie przestawia stรณล | Oddzielna struktura |
| Liczba na tabelฤ | jeden | Kilka |
| Wydajnoลฤ | Szybciej w przypadku zapytaล o zakres | Szybciej w przypadku okreลlonych wyszukiwaล |
| Przykลad uลผycia | Gลรณwny klucz | Wyszukiwania wtรณrne |
Przykลad:
CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID); CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);
Wybรณr wลaลciwego typu indeksu ma bezpoลredni wpลyw na szybkoลฤ wykonywania zapytaล i efektywnoลฤ przechowywania.
11) Czym sฤ procedury skลadowane w jฤzyku T-SQL i dlaczego siฤ ich uลผywa?
Procedura skลadowana to wstฤpnie skompilowany zbiรณr jednego lub wiฤkszej liczby poleceล SQL przechowywanych na serwerze. Zwiฤkszajฤ one wydajnoลฤ, bezpieczeลstwo i moลผliwoลฤ ponownego uลผycia, umoลผliwiajฤ c hermetyzacjฤ logiki i jej wielokrotne wykonywanie bez koniecznoลci ponownej kompilacji. Procedury skลadowane zmniejszajฤ ruch sieciowy i obsลugujฤ parametry dynamicznego wykonywania.
Przykลad:
CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;
Korzyลci:
- Lepsza wydajnoลฤ dziฤki wstฤpnej kompilacji.
- Poprawa bezpieczeลstwa poprzez kontrolowane wykonywanie zadaล.
- ลatwiejsza konserwacja kodu i modularnoลฤ.
12) Wyjaลnij rรณลผnicฤ miฤdzy procedurฤ skลadowanฤ a funkcjฤ w jฤzyku T-SQL.
| WYGLฤD | Procedura skลadowana | Funkcjonowaฤ |
|---|---|---|
| Typ zwrotu | Moลผe zwracaฤ wiele wartoลci | Musi zwrรณciฤ pojedynczฤ wartoลฤ lub tabelฤ |
| Uลผyj w SELECT | Niedozwolone | Dozwolony |
| Obsลuga bลฤdรณw | TRYโฆCATCH obsลugiwany | Ograniczony |
| Egzekucja | Wykonano za poลrednictwem EXEC |
Uลผywane w linii z SQL |
| Kontrola transakcji | Utrzymany | Nie jest obsลugiwany |
Przykลad:
- Procedura:
EXEC GetEmployeeDetails 'HR'; - Funkcja:
SELECT dbo.GetSalary(101);
Funkcje idealnie nadajฤ siฤ do obliczeล, procedury lepiej sprawdzajฤ siฤ w logice biznesowej i manipulacji danymi.
13) Czym jest wyzwalacz w jฤzyku T-SQL i jakie sฤ jego typy?
Wyzwalacz to specjalna procedura skลadowana, ktรณra uruchamia siฤ automatycznie w odpowiedzi na okreลlone zdarzenia (INSERT, UPDATE, DELETE) w tabeli lub widoku. Wyzwalacze sลuลผฤ do egzekwowania reguล biznesowych, audytu zmian lub utrzymywania integralnoลci referencyjnej.
| Typ | OPIS |
|---|---|
| PO WYZWALU | Poลผary po zakoลczeniu wydarzenia |
| ZAMIAST wyzwalacza | Wykonuje siฤ w miejsce zdarzenia wyzwalajฤ cego |
Przykลad:
CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
PRINT 'New employee record added!';
END;
Unikaj nadmiernego uลผywania wyzwalaczy โ mogฤ one wpลywaฤ na wydajnoลฤ i komplikowaฤ debugowanie.
14) Jak obsลugiwaฤ wartoลci NULL w jฤzyku T-SQL?
Wartoลฤ NULL oznacza brakujฤ ce lub nieznane dane. Jฤzyk T-SQL oferuje kilka funkcji, ktรณre skutecznie sobie z tym radzฤ :
ISNULL(expression, replacement)โ zastฤpuje NULL wartoลciฤ domyลlnฤ .COALESCE(expression1, expression2, ...)โ zwraca pierwszฤ wartoลฤ rรณลผnฤ od NULL.NULLIF(expression1, expression2)โ zwraca NULL, jeลผeli wyraลผenia sฤ rรณwne.
Przykลad:
SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;
Najlepsza praktyka: Zawsze uwzglฤdniaj wartoลci NULL w poลฤ czeniach i warunkach, aby uniknฤ ฤ nieoczekiwanych wynikรณw.
15) Czym sฤ kursory w jฤzyku T-SQL i kiedy naleลผy ich unikaฤ?
Kursor umoลผliwia przetwarzanie wynikรณw zapytania wiersz po wierszu โ przydatne w przypadku zลoลผonej logiki, w ktรณrej operacje oparte na zbiorach sฤ niewystarczajฤ ce. Kursory sฤ jednak powolny oraz wymagajฤ cy duลผej iloลci zasobรณw w porรณwnaniu do alternatyw opartych na zestawach.
Przykลad:
DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees; OPEN emp_cursor; FETCH NEXT FROM emp_cursor; -- process CLOSE emp_cursor; DEALLOCATE emp_cursor;
Niedogodnoลci:
- Zwiฤkszone wykorzystanie pamiฤci.
- Sลaba skalowalnoลฤ.
- Zmniejszona wydajnoลฤ.
Alternatywa: Jeลli to moลผliwe, naleลผy uลผywaฤ ลฤ czeล tabel, podzapytaล i funkcji okna.
16) Wyjaลnij polecenie MERGE i przypadki jego uลผycia.
MERGE polecenie wykonuje INSERT, Aktualizacja, DELETE operacje w jednym poleceniu โ idealne do synchronizacji dwรณch tabel.
Przykลad skลadni:
MERGE INTO Target AS T USING Source AS S ON T.ID = S.ID WHEN MATCHED THEN UPDATE SET T.Name = S.Name WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Name) VALUES (S.ID, S.Name) WHEN NOT MATCHED BY SOURCE THEN DELETE;
Przypadkรณw uลผycia:
- Magazynowanie danych (synchronizacja tabel przejลciowych i docelowych).
- Przyrostowe ลadowanie danych.
- Prowadzenie tabel audytu lub wymiarรณw.
17) Jakie sฤ rรณลผne typy funkcji zdefiniowanych przez uลผytkownika (UDF) w jฤzyku T-SQL?
| Typ | OPIS | Przykลad |
|---|---|---|
| Skalarny | Zwraca pojedynczฤ wartoลฤ | CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL |
| Wbudowana tabela wartoลci | Zwraca tabelฤ za pomocฤ
pojedynczego SELECT |
RETURN SELECT * FROM Employees WHERE Dept = 'HR' |
| Wieloinstrukcyjny ukลad wartoลci tabelarycznych | Zwraca tabelฤ po wielu poleceniach | Przydatne w przypadku zลoลผonej logiki |
Funkcje te uลatwiajฤ ponowne wykorzystanie kodu i wzbogacajฤ moduลowฤ konstrukcjฤ zapytaล.
Powinny byฤ one deterministyczne (zwracaฤ ten sam wynik dla tych samych danych wejลciowych), o ile jest to moลผliwe w celu optymalizacji wydajnoลci.
18) Czym jest normalizacja i jakie sฤ jej zalety i wady?
Normalizacja to proces porzฤ dkowania danych w bazie danych w celu zminimalizowania redundancji i poprawy integralnoลci. Polega ona na podziale tabel na mniejsze, powiฤ zane ze sobฤ jednostki.
| Normalna forma | Zasada | Przykลad |
|---|---|---|
| 1NF | Wyeliminuj powtarzajฤ ce siฤ grupy | Podziel dane rozdzielone przecinkami |
| 2NF | Usuล czฤลciowe zaleลผnoลci | Zapewnij peลnฤ zaleลผnoลฤ od klucza podstawowego |
| 3NF | Usuล zaleลผnoลci przechodnie | Przenieล atrybuty pochodne |
Zalety:
- Zmniejsza redundancjฤ.
- Zapewnia spรณjnoลฤ danych.
- Uลatwia konserwacjฤ.
Niedogodnoลci:
- Poลฤ czenia zลoลผone.
- Potencjalne kompromisy wydajnoลciowe w przypadku zapytaล analitycznych.
19) Jakie sฤ rรณลผne typy ograniczeล w T-SQL?
Ograniczenia wymuszajฤ reguลy dotyczฤ ce integralnoลci danych w tabeli.
| Przymus | Cel | Przykลad |
|---|---|---|
| KLUCZ PODSTAWOWY | Unikalnie identyfikuje kaลผdy wiersz | PRIMARY KEY (EmpID) |
| KLUCZ OBCY | ลฤ czy dwie tabele | FOREIGN KEY (DeptID) |
| NIECODZIENNCH | Zapewnia unikalne wartoลci kolumn | UNIQUE (Email) |
| SPRAWDZ | Sprawdza zakres danych | CHECK (Age >= 18) |
| DEFAULT | Zapewnia wartoลci domyลlne | DEFAULT GETDATE() |
Ograniczenia zapewniajฤ dokลadnoลฤ i niezawodnoลฤ, redukujฤ c potrzebฤ rozlegลej walidacji na poziomie aplikacji.
20) Jak zarzฤ dzaฤ uprawnieniami i bezpieczeลstwem w T-SQL?
T-SQL zarzฤ dza bezpieczeลstwem bazy danych za poลrednictwem logowania, uลผytkownicy, role i uprawnienia.
Uprawnienia mogฤ byฤ przyznawane lub cofane na poziomie obiektu lub schematu.
Przykลad:
CREATE LOGIN John WITH PASSWORD = 'Strong@123'; CREATE USER John FOR LOGIN John; GRANT SELECT, INSERT ON Employees TO John;
Najlepsze Praktyki:
- Zastosowanie role zamiast bezpoลrednich uprawnieล uลผytkownika.
- Unikaj uลผywania
salub konta systemowe dla aplikacji. - Regularnie sprawdzaj uprawnienia za pomocฤ
sys.database_permissions.
Prawidลowe zarzฤ dzanie uprawnieniami zapewnia przestrzeganie zasady najmniejszych uprawnieล i zgodnoลฤ z politykฤ bezpieczeลstwa.
21) Jakie sฤ rรณลผne poziomy izolacji transakcji w T-SQL?
Poziomy izolacji transakcji okreลlajฤ sposรณb izolowania jednej transakcji od innych โ rรณwnowaลผenie konsystencja w wspรณลbieลผnoลฤ. Serwer SQL obsลuguje nastฤpujฤ ce funkcje:
| Poziom izolacji | OPIS | Brudny odczyt | Niepowtarzalny odczyt | Fantomowe czytanie |
|---|---|---|---|---|
| CZYTAJ NIEZGODNE | Odczytuje niezatwierdzone dane | Tak | Tak | Tak |
| PRZECZYTAJ ZATWIERDZONE | Domyลlne; blokady zapobiegajฤ niepoprawnym odczytom | Nie | Tak | Tak |
| POWTARZALNA CZYTANIE | Zapobiega zmianie danych do momentu zatwierdzenia | Nie | Nie | Tak |
| SERIALIZOWANY | Peลna izolacja; najwyลผszy poziom blokowania | Nie | Nie | Nie |
| MIGAWKA | Uลผywa wersjonowania, a nie blokowania | Nie | Nie | Nie |
Przykลad:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; -- your code COMMIT;
Zastosowanie MIGAWKA dla systemรณw o wysokiej wspรณลbieลผnoลci w celu zminimalizowania blokowania bez poลwiฤcania spรณjnoลci.
22) Czym jest impas w programie SQL Server i jak moลผna mu zapobiec?
A impas Wystฤpuje, gdy dwie transakcje posiadajฤ blokady, ktรณrych potrzebuje druga, co skutkuje impasem. SQL Server automatycznie wykrywa i koลczy jednฤ transakcjฤ jako ofiarฤ impasu.
Przykลadowy scenariusz:
- Transakcja A blokuje Tabelฤ 1, a nastฤpnie czeka na Tabelฤ 2.
- Transakcja B blokuje Tabelฤ 2, a nastฤpnie czeka na Tabelฤ 1.
Techniki zapobiegawcze:
- Uzyskaj dostฤp do zasobรณw w tej samej kolejnoลci.
- Utrzymuj krรณtkie transakcje.
- Stosuj odpowiednie poziomy izolacji.
- Unikaj interakcji uลผytkownika podczas transakcji.
Uลผyj narzฤdzia SQL Profiler lub Extended Events, aby traci blokad w czasie rzeczywistym.
23) Wyjaลnij rรณลผnicฤ miฤdzy pesymistycznฤ i optymistycznฤ kontrolฤ wspรณลbieลผnoลci.
| Typ | OPIS | Zamykajฤ cy mechanizm | Przypadek uลผycia |
|---|---|---|---|
| Pesymistyczny | Blokuje dane podczas transakcji | Mocne blokowanie | ลrodowiska o wysokim poziomie konfliktรณw |
| Optymistyczny | Uลผywa wersjonowania wierszy, sprawdza przed zatwierdzeniem | Minimalne blokowanie | Obciฤ ลผenia wymagajฤ ce duลผej iloลci odczytu i niskiej liczby konfliktรณw |
Przykลad:
- Pesymistyczny: Domyลlny
READ COMMITTEDzamykajฤ cy. - Optymistyczny:
SNAPSHOTizolacja z wersjonowaniem wierszy.
Optymistyczna wspรณลbieลผnoลฤ zwiฤksza wydajnoลฤ systemรณw wykonujฤ cych duลผe operacje odczytu i rzadkie aktualizacje.
24) Jak moลผna analizowaฤ i optymalizowaฤ wolno dziaลajฤ ce zapytania T-SQL?
- Sprawdลบ plan wykonania: Identyfikuj skany, brakujฤ ce indeksy i kosztowne operacje.
- Uลผyj SET STATISTICS IO/TIME: Analizuj uลผycie wejลcia/wyjลcia i procesora.
- Unikaj kursorรณw i pฤtli: Zastฤ p operacjami opartymi na zbiorach.
- Optymalizacja indeksu: Dodawanie i reorganizacja pofragmentowanych indeksรณw.
- Wฤ
chanie parametrรณw: Zastosowanie
OPTION (RECOMPILE)aby wygenerowaฤ nowe plany.
Przykลad:
SET STATISTICS TIME ON; SELECT * FROM Orders WHERE CustomerID = 123;
Regularne monitorowanie powolnych zapytaล za pomocฤ
Dynamiczne widoki zarzฤ
dzania (DMV) lubiฤ sys.dm_exec_query_stats jest najlepszฤ
praktykฤ
.
25) Czym jest Dynamic SQL i jakie sฤ jego zalety i zagroลผenia?
Dynamiczny SQL umoลผliwia dynamiczne konstruowanie instrukcji SQL w czasie wykonywania przy uลผyciu zmiennych.
Przykลad:
DECLARE @sql NVARCHAR(MAX); SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + ''''; EXEC(@sql);
Zalety:
- Elastycznoลฤ w zakresie zmiennych nazw tabel i filtrรณw.
- Moลผliwoลฤ ponownego wykorzystania w wielu schematach.
Niedogodnoลci:
- Podatny na SQL Injection jeลli nie jest sparametryzowane.
- Trudniejsze do debugowania i konserwacji.
Zawsze uลผywaj sp_executesql z parametrami bezpieczeลstwa.
26) Czym sฤ obiekty tymczasowe w jฤzyku T-SQL i czym siฤ miฤdzy nimi rรณลผniฤ ?
Obiekty tymczasowe sฤ przechowywane w TempDB i pomรณc w zarzฤ dzaniu danymi poลrednimi.
| Rodzaj obiektu | Zakres | Przykลad |
|---|---|---|
| Lokalna tabela temperatur | Specyficzne dla sesji | CREATE TABLE #TempTable |
| Globalna tabela temperatur | Widoczne dla wszystkich sesji | CREATE TABLE ##TempGlobal |
| Zmienna tabeli | Specyficzne dla partii | DECLARE @Temp TABLE (...) |
Najlepsze Praktyki:
- W przypadku mniejszych zbiorรณw danych naleลผy preferowaฤ zmienne tabelaryczne.
- W przypadku wiฤkszych zbiorรณw danych wymagajฤ cych indeksowania naleลผy uลผywaฤ lokalnych tabel tymczasowych.
- Aby szybciej zwolniฤ zasoby, naleลผy wyraลบnie usunฤ ฤ tabele tymczasowe.
27) Jak uลผywaฤ funkcji partycjonowania okien w jฤzyku T-SQL?
Partycjonowanie pozwala na stosowanie funkcji okna do okreลlonych podzbiorรณw danych.
Przykลad:
SELECT
Department,
EmpName,
Salary,
RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;
Korzyลci:
- Efektywnie oblicza rankingi, sumy i ลrednie dla kaลผdej grupy.
- Eliminuje potrzebฤ wykonywania samosprzฤลผeล i podzapytaล.
Przypadkรณw uลผycia: Przedziaลy wynagrodzeล, rankingi sprzedaลผy i analiza trendรณw.
28) Jaka jest rรณลผnica miฤdzy UNION i UNION ALL w jฤzyku T-SQL?
| Klauzula | Duplikaty | Wydajnoลฤ | Przypadek uลผycia |
|---|---|---|---|
| UNION | Usuwa duplikaty | Wolniejszy (uลผywa sortowania/odrรณลผniania) | Czyste ลฤ czenie zestawรณw wynikรณw |
| UNIA WSZYSTKIE | Zachowuje duplikaty | Szybciej | Agregacja lub migracja danych |
Przykลad:
SELECT City FROM Customers UNION SELECT City FROM Suppliers;
Woleฤ UNION ALL kiedy duplikaty sฤ
akceptowalne, a wydajnoลฤ ma znaczenie.
29) Jak pracowaฤ z danymi JSON w jฤzyku T-SQL?
SQL Server obsลuguje natywne funkcje JSON sลuลผฤ ce do analizowania i generowania danych JSON.
Przykลad:
DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;
Kluczowe funkcje:
JSON_VALUE()โ Byลytracwartoลci skalarne ts.JSON_QUERY()โ Byลytracobiekty/tablice ts.OPENJSON()โ Analizuje JSON na wiersze.FOR JSONโ Konwertuje wyniki zapytania do formatu JSON.
Przydatne w przypadku interfejsรณw API, systemรณw hybrydowych i integracji NoSQL.
30) Jak zarzฤ dzaฤ bazฤ danych TempDB w programie SQL Server i jฤ optymalizowaฤ?
TempDB to systemowa baza danych, ktรณra ma kluczowe znaczenie dla tymczasowego przechowywania i kontroli wersji. Niewลaลciwe zarzฤ
dzanie moลผe powodowaฤ powaลผne problemy z wydajnoลciฤ
.
Techniki optymalizacji:
- Umieลฤ TempDB na szybkim dysku SSD.
- Wstฤpnie okreลl rozmiar plikรณw danych i dziennika.
- Uลผyj wielu plikรณw danych (1 na kaลผdy rdzeล procesora, maksymalnie 8).
- Monitoruj z
sys.dm_db_file_space_usage. - Regularnie usuwaj tymczasowe obiekty.
Przykลadowe zapytanie:
SELECT * FROM sys.dm_db_file_space_usage;
Aktywne zarzฤ dzanie bazฤ danych TempDB pozwala uniknฤ ฤ konfliktรณw na stronach alokacji i zwiฤksza ogรณlnฤ przepustowoลฤ bazy danych.
31) Czym sฤ wskazรณwki dotyczฤ ce zapytaล w jฤzyku T-SQL i kiedy naleลผy ich uลผywaฤ?
Wskazรณwki dotyczฤ ce zapytania instruujฤ optymalizator programu SQL Server, aby zmieniล swรณj normalny plan wykonania.
Naleลผy ich uลผywaฤ oszczฤdnie โ tylko wtedy, gdy w peลni rozumiesz kontekst dystrybucji danych i wykonania.
Przykลad:
SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;
Wskazรณwki:
NOLOCK:Odczytuje bez blokad (moลผe odczytywaฤ niezatwierdzone dane).FORCESEEK:Wymusza wyszukiwanie indeksowe zamiast skanowania.OPTIMIZE FOR:Przewodniki dotyczฤ ce wartoลci parametrรณw dla generowania planu.RECOMPILE:Wymusza ponownฤ kompilacjฤ przy kaลผdym wykonaniu.
Ostrzeลผenie: Naduลผywanie wskazรณwek moลผe obniลผyฤ wydajnoลฤ wraz ze wzrostem iloลci danych lub zmianฤ wzorcรณw. Uลผywaj ich tylko wtedy, gdy plan optymalizatora jest ewidentnie nieefektywny.
32) Wyjaลnij koncepcjฤ buforowania planu wykonania w programie SQL Server.
Serwer SQL buforuje plany wykonania, aby uniknฤ ฤ ponownej kompilacji w przypadku powtarzajฤ cych siฤ zapytaล.
Gdy to samo zapytanie jest wykonywane ponownie z identycznฤ strukturฤ , ponownie wykorzystywany jest plan z pamiฤci podrฤcznej, co poprawia wydajnoลฤ.
Przykลad:
EXEC GetCustomerOrders @CustomerID = 101;
Korzyลci:
- Zmniejsza obciฤ ลผenie procesora.
- Poprawia spรณjnoลฤ czasu reakcji.
Problemy:
- Podsลuchiwanie parametrรณw moลผe spowodowaฤ nieefektywne plany.
- Rozrost pamiฤci podrฤcznej planu moลผe spowodowaฤ zuลผycie pamiฤci.
ลagodzenie: Zastosowanie OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN gdzie parametry znacznie siฤ rรณลผniฤ
.
33) Czym jest analizowanie parametrรณw i jak moลผe ono wpลywaฤ na wydajnoลฤ?
Podsลuchiwanie parametrรณw ma miejsce, gdy program SQL Server uลผywa wartoลci parametrรณw z pierwszego wykonania zapytania w celu wygenerowania planu, ktรณry jest nastฤpnie ponownie wykorzystywany โ nawet jeลli nie jest optymalny w przypadku pรณลบniejszych wykonaล.
Przykลadowy scenariusz:
- Pierwsze wykonanie: maลy zestaw danych โ plan wyszukiwania indeksu.
- Nastฤpne wykonanie: duลผy zbiรณr danych โ ten sam plan wykorzystany ponownie, ale wolno.
Solutions:
- Zastosowanie
OPTION (RECOMPILE)aby wygenerowaฤ nowe plany. - Uลผyj zmiennych lokalnych do zamaskowania wartoลci parametrรณw.
- Zastosowanie
OPTIMIZE FORorOPTIMIZE FOR UNKNOWN.
Podsลuchiwanie parametrรณw jest jednฤ z najczฤstszych przyczyn nieprzewidywalnej wydajnoลci w jฤzyku T-SQL.
34) Jak monitorowaฤ i analizowaฤ wydajnoลฤ zapytaล w programie SQL Server?
Do profilowania i dostrajania wydajnoลci moลผna uลผywaฤ rรณลผnych narzฤdzi i modeli DMV:
- Plany wykonania:
Ctrl + Mw SSMS lubsys.dm_exec_query_plan. - Wydziaลy komunikacji:
sys.dm_exec_query_statsโ Procesor i czas trwania.sys.dm_exec_sql_textโ Tekst SQL.sys.dm_exec_requestsโ Aktywne zapytania.
- Monitor wydajnoลci i rozszerzone zdarzenia na dลuลผszฤ metฤ trackrรณl.
Przykลad:
SELECT TOP 5
total_worker_time / execution_count AS AvgCPU,
total_elapsed_time / execution_count AS AvgTime,
SUBSTRING(qt.text, 1, 100) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgTime DESC;
35) Wyjaลnij rolฤ statystyk w optymalizacji zapytaล.
Statystyki opisujฤ rozkลad danych (np. rรณลผne wartoลci, gฤstoลฤ, histogram), ktรณrego optymalizator uลผywa do oszacowania kardynalnoลci.
Jeลli statystyki sฤ nieaktualne, program SQL Server moลผe wybraฤ zลe plany.
Komendy kluczowe:
UPDATE STATISTICS Employees;sp_updatestats;- Ustawienie automatycznej aktualizacji: domyลlnie wลฤ czone.
Najlepsze Praktyki:
- Trzymaฤ
AUTO_UPDATE_STATISTICSwลฤ czone. - W przypadku duลผych tabel zaplanuj aktualizacje rฤczne.
- Zastosowanie
FULLSCANdla indeksรณw krytycznych.
Nieaktualne statystyki sฤ cichym zabรณjcฤ wydajnoลci.
36) Jaka jest rรณลผnica pomiฤdzy wyszukiwaniem indeksu a skanowaniem indeksu?
| Operacja | OPIS | Wydajnoลฤ | Przypadek uลผycia |
|---|---|---|---|
| Indeks Szukaj | Przechodzi bezpoลrednio do pasujฤ cych wierszy | pompatycznoลฤ | Wysoce selektywne zapytania |
| Skanowanie indeksu | Odczytuje wszystkie wpisy indeksu sekwencyjnie | Wolniej | Zapytania o niskiej selektywnoลci |
Przykลad:
SELECT * FROM Orders WHERE OrderID = 123; -- Seek SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan
Wskazรณwka dotyczฤ ca optymalizacji: Utwรณrz indeksy filtrowane lub obejmujฤ ce, aby przeksztaลciฤ skanowanie w wyszukiwanie.
37) Wyjaลnij pojฤcie tabel partycjonowanych i ich zalety.
Partycjonowanie polega na podziale duลผej tabeli na mniejsze, ลatwiejsze do zarzฤ dzania czฤลci (partycje), czฤsto w oparciu o zakres kolumny (np. daty).
Korzyลci:
- Szybsze zarzฤ dzanie danymi (ลadowanie/rozลadowywanie wedลug partycji).
- Poprawiona wydajnoลฤ zapytaล w przypadku duลผych zestawรณw danych.
- Przetwarzanie rรณwnolegลe dla skanowaล partycjonowanych.
Przykลad:
CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');
Przypadek uลผycia: Magazyny danych obsลugujฤ ce miliardy wierszy, w ktรณrych moลผna efektywnie archiwizowaฤ stare partycje.
38) Czym sฤ rekurencyjne CTE i jakie majฤ ograniczenia?
A rekurencyjne wspรณlne wyraลผenie tabelaryczne (CTE) odwoลuje siฤ do samego siebie, zwykle w przypadku danych hierarchicznych, takich jak schematy organizacyjne lub struktury drzewa.
Przykลad:
WITH EmployeeCTE AS (
SELECT EmpID, ManagerID, EmpName FROM Employees WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmpID, e.ManagerID, e.EmpName
FROM Employees e
INNER JOIN EmployeeCTE c ON e.ManagerID = c.EmpID
)
SELECT * FROM EmployeeCTE;
Ograniczenia:
- Domyลlny limit rekurencji = Poziomy 100.
- Moลผe powodowaฤ problemy z wydajnoลciฤ , jeลli gลฤbokoลฤ rekursji jest duลผa.
- Zastosowanie
OPTION (MAXRECURSION n)aby dostosowaฤ limit.
39) W jaki sposรณb SQL Server radzi sobie wewnฤtrznie z bลฤdami w transakcjach?
Gdy w transakcji wystฤ pi bลฤ d:
- Jeลผeli to jest ciฤลผki (poziom > 20), poลฤ czenie zostanie natychmiast zakoลczone.
- If niegroลบny, moลผna go zลapaฤ
TRY...CATCH.
Przykลad:
BEGIN TRY
BEGIN TRANSACTION;
UPDATE Accounts SET Balance -= 500 WHERE ID = 1;
INSERT INTO AuditLog VALUES ('Debit');
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT ERROR_MESSAGE();
END CATCH;
Najlepsze praktyki: Zawsze opakowuj DML w TRYโฆCATCH, aby zwiฤkszyฤ odpornoลฤ na bลฤdy.
40) Jakie sฤ zaawansowane techniki dostrajania wydajnoลci jฤzyka T-SQL?
- Unikaj skalarnych funkcji UDF w SELECT โ funkcje inline sฤ szybsze.
- Uลผyj filtrowanych indeksรณw aby zmniejszyฤ rozmiar indeksu.
- Wykorzystanie OLTP w pamiฤci (Hekaton) dla systemรณw o wysokiej wspรณลbieลผnoลci.
- Wykonywanie w trybie wsadowym na indeksach kolumnowych do celรณw analitycznych.
- Wyeliminuj niejawne konwersje poprzez dopasowywanie typรณw danych.
- Uลผyj magazynu zapytaล aby porรณwnaฤ plany historyczne.
Przykลad wykrywania konwersji niejawnych:
SELECT * FROM sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_query_plan(plan_handle) WHERE CAST(query_plan AS NVARCHAR(MAX)) LIKE '%CONVERT_IMPLICIT%';
Dostrajanie wydajnoลci to proces ciฤ gลy, a nie jednorazowe wydarzenie.
41) Jak zidentyfikowaลbyล zapytania w programie SQL Server wymagajฤ ce najwiฤkszej iloลci zasobรณw?
Kosztowne zapytania moลผna zidentyfikowaฤ, korzystajฤ c z dynamicznych widokรณw zarzฤ dzania (DMV), ktรณre rejestrujฤ historyczne statystyki wykonania.
Przykลad:
SELECT TOP 10
total_logical_reads / execution_count AS AvgReads,
total_worker_time / execution_count AS AvgCPU,
total_elapsed_time / execution_count AS AvgDuration,
SUBSTRING(qt.text, 1, 200) AS QueryText
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY AvgCPU DESC;
Kluczowe dane:
AvgCPU:ลredni czas procesora na wykonanie.AvgReads:Intensywnoลฤ wejลcia/wyjลcia.AvgDuration:Opรณลบnienie wykonania.
Dziฤki takiemu podejลciu administratorzy baz danych mogฤ izolowaฤ skomplikowane zapytania, zanim uลผytkownicy zauwaลผฤ spadek wydajnoลci.
42) Jak wykryฤ i naprawiฤ brakujฤ ce indeksy w programie SQL Server?
SQL Server automatycznie tracbrakujฤ ce zalecenia indeksowe dla DMV.
Przykลad:
SELECT
migs.user_seeks AS Seeks,
mid.statement AS TableName,
mid.equality_columns,
mid.inequality_columns,
mid.included_columns
FROM sys.dm_db_missing_index_details mid
JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
ORDER BY migs.user_seeks DESC;
Najlepsze Praktyki:
- Najpierw naleลผy priorytetyzowaฤ indeksy o wysokim priorytecie.
- Przed utworzeniem naleลผy dokonaฤ weryfikacji za pomocฤ planรณw wykonania.
- Unikaj nadmiernego indeksowania, gdyลผ spowalnia ono zapis.
43) Jaka jest rรณลผnica miฤdzy kopiowaniem lustrzanym bazy danych, replikacjฤ i wysyลaniem dziennika?ping?
| Cecha | Cel | W czasie rzeczywistym | Failover | Zลoลผonoลฤ |
|---|---|---|---|---|
| Lustrzane odbicie | Kopia bazy danych o wysokiej dostฤpnoลci | Tak | automatycznie | ลredni |
| Replikacja | Dystrybucja danych w bazach danych | Czฤลciowa | Instrukcja obsลugi | Wysoki |
| Statek Logowyping | Strategia DR oparta na kopii zapasowej | Nie | Instrukcja obsลugi | Niski |
Wskazรณwki dotyczฤ ce uลผytkowania:
- Mirroring โ Systemy wysokiej dostฤpnoลci OLTP.
- Replikacja โ Raportowanie rozproszone.
- Statek Logowyping โ Konfiguracje odzyskiwania po awarii.
44) Jak rozwiฤ zywaฤ problemy z blokowaniem w programie SQL Server?
Blokowanie wystฤpuje wtedy, gdy jeden proces utrzymuje blokady potrzebne innemu procesowi.
Aby zidentyfikowaฤ blokery:
SELECT
blocking_session_id AS Blocker,
session_id AS Blocked,
wait_type,
wait_time,
wait_resource
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;
Solutions:
- Skrรณฤ dลugoลฤ transakcji.
- Uลผyj izolacji migawek.
- Dopasuj zapytania, aby zminimalizowaฤ blokowanie.
- Zidentyfikuj otwarte transakcje trwajฤ
ce dลugo
DBCC OPENTRAN.
45) W jaki sposรณb Query Store serwera SQL Server pomaga w dostrajaniu wydajnoลci?
Magazyn zapytaล przechwytuje tekst zapytania, plany i statystyki czasu wykonania, umoลผliwiajฤ c analiza regresji planu.
Pomaga zidentyfikowaฤ sytuacjฤ, w ktรณrej zapytanie nagle staje siฤ wolniejsze ze wzglฤdu na zmiany planu.
Przykลad:
SELECT q.query_id, p.plan_id, rs.avg_duration FROM sys.query_store_query q JOIN sys.query_store_plan p ON q.query_id = p.query_id JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id ORDER BY rs.avg_duration DESC;
Korzyลci:
- Porรณwnaj plany historyczne.
- Wymuszaj dobre plany.
- Track trendรณw wydajnoลci na przestrzeni czasu.
46) Jak moลผna zapobiec atakom typu SQL injection w aplikacjach T-SQL?
Obrona podstawowa:
- Zastosowanie zapytania parametryczne przez
sp_executesql. - Sprawdลบ poprawnoลฤ i dezynfekcjฤ wszystkich danych wprowadzanych przez uลผytkownika.
- Unikaj dynamicznego ลฤ czenia SQL.
- Zatrudniaฤ zasada najmniejszych przywilejรณw dla kont baz danych.
Bezpieczny przykลad:
DECLARE @sql NVARCHAR(MAX); SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept'; EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';
Mimo ลผe wstrzykiwanie kodu SQL odbywa siฤ na poziomie aplikacji, Administratorzy baz danych muszฤ przeprowadzaฤ audyt procedur skลadowanych i dziennikรณw do wykonania bez parametrรณw.
47) Jak wykorzystaฤ Extended Events do szczegรณลowego monitorowania wydajnoลci?
Extended Events (XEvents) to lekka platforma do monitorowania wydajnoลci โ nowoczesna alternatywa dla jฤzyka SQL Trace.
Przykลad:
CREATE EVENT SESSION TrackQueries ON SERVER ADD EVENT sqlserver.sql_statement_completed (WHERE duration > 1000) ADD TARGET package0.event_file (SET filename = 'C:\Temp\QueryMonitor.xel'); ALTER EVENT SESSION TrackQueries ON SERVER STATE = START;
Przypadkรณw uลผycia:
- Monitoruj duลผe zapytania procesora.
- Wychwytywanie blokad i brakujฤ cych indeksรณw.
- Profiluj dลugotrwaลe polecenia w ลrodowisku produkcyjnym, minimalizujฤ c narzut.
48) Czym sฤ indeksy filtrowane i kiedy naleลผy ich uลผywaฤ?
Indeks filtrowany indeksuje tylko podzbiรณr wierszy speลniajฤ cych warunek filtru โ co poprawia wydajnoลฤ i zmniejsza iloลฤ miejsca do przechowywania.
Przykลad:
CREATE INDEX IX_ActiveEmployees ON Employees (Department) WHERE Status = 'Active';
Korzyลci:
- Mniejszy rozmiar indeksu.
- Szybsza konserwacja.
- Zoptymalizowany pod kฤ tem zapytaล selektywnych.
Najlepszy dla: Kolumny z nierรณwnomiernym rozkลadem danych (np. rekordy aktywne i nieaktywne).
49) Jak bezpiecznie migrowaฤ dane miฤdzy ลrodowiskami SQL Server?
Bezpieczna migracja danych wymaga zaplanowania spรณjnoลฤ, przestoje i wycofywanie.
Najlepsze Praktyki:
- Zastosowanie replikacja transakcyjna or przechwytywanie danych zmianowych (CDC) do synchronizacji na ลผywo.
- Tymczasowo wyลฤ cz ograniczenia i wyzwalacze.
- Zastosowanie BCP or SSIS do masowego przesyลania danych.
- Sprawdลบ liczbฤ wierszy i sumy kontrolne.
- Zawsze uruchamiaj kontrole integralnoลci po migracji (
DBCC CHECKDB).
Przykลad:
bcp Database.dbo.Table out TableData.dat -n -S Server -T
Testowanie skryptรณw migracji w ลrodowisku przejลciowym nie podlega negocjacjom.
50) Jak identyfikowaฤ i rozwiฤ zywaฤ problemy zwiฤ zane z zapytaniami wraลผliwymi na parametry (PSQ)?
Zapytania wraลผliwe na parametry dziaลajฤ niespรณjnie w zaleลผnoลci od wartoลci parametrรณw, co jest czฤstym problemem w praktyce.
Wykrycie: Zastosowanie Sklep zapytaล or sys.dm_exec_query_stats aby zidentyfikowaฤ wiele planรณw dla jednego zapytania.
Strategie naprawcze:
- Zastosowanie OPCJA (PONOWNA KOMPILACJA) za kaลผdฤ egzekucjฤ.
- Zastosowanie OPTYMALIZUJ POD KฤTEM NIEZNANEGO aby stworzyฤ ogรณlny plan.
- Stwรณrz przewodniki po planach aby wymusiฤ optymalne ลcieลผki wykonania.
- Zastosowanie wskazรณwki dotyczฤ ce zapytaล tylko jeลli to konieczne.
Zagadnienia wraลผliwe na parametry wymagajฤ znalezienia rรณwnowagi miฤdzy stabilnoลciฤ planu i przewidywalnoลciฤ wydajnoลci.
๐ Najwaลผniejsze pytania na rozmowie kwalifikacyjnej dotyczฤ ce jฤzyka T-SQL, scenariusze z ลผycia wziฤte i odpowiedzi strategiczne
1) Jaka jest rรณลผnica miฤdzy INNER JOIN i LEFT JOIN w jฤzyku T-SQL?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ chce sprawdziฤ Twojฤ wiedzฤ na temat operacji ลฤ czenia i sposobu zarzฤ dzania relacjami miฤdzy danymi w zapytaniach SQL.
Przykลadowa odpowiedลบ: An INNER JOIN zwraca tylko wiersze, ktรณre majฤ
pasujฤ
ce wartoลci w obu tabelach, podczas gdy LEFT JOIN Zwraca wszystkie wiersze z lewej tabeli wraz z pasujฤ
cymi wierszami z prawej tabeli. W przypadku braku dopasowania, dla kolumn z prawej tabeli zwracane sฤ
wartoลci NULL. To rozrรณลผnienie jest kluczowe podczas pracy z czฤลciowymi lub opcjonalnymi relacjami w bazach danych.
2) Jak zidentyfikowaฤ i usunฤ ฤ duplikaty rekordรณw z tabeli w jฤzyku T-SQL?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ chce sprawdziฤ Twojฤ umiejฤtnoลฤ korzystania z funkcji okna i CTE w celu radzenia sobie z problemami zwiฤ zanymi z jakoลciฤ danych.
Przykลadowa odpowiedลบ: Uลผyลbym wspรณlnego wyraลผenia tabelarycznego (CTE) w poลฤ
czeniu z ROW_NUMBER() Funkcja identyfikacji duplikatรณw. Na przykลad:
WITH CTE AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn FROM MyTable ) DELETE FROM CTE WHERE rn > 1;
Takie podejลcie pozwala usunฤ ฤ duplikaty, zachowujฤ c jednoczeลnie jeden unikatowy rekord dla kaลผdej grupy.
3) Czy moลผesz wyjaลniฤ, czym jest CTE (Common Table Expression) i kiedy siฤ go uลผywa?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ sprawdza Twojฤ wiedzฤ na temat strukturyzacji zapytaล i tymczasowych zestawรณw wynikรณw.
Przykลadowa odpowiedลบ: CTE to tymczasowy zbiรณr wynikรณw zdefiniowany w zakresie wykonania pojedynczego zapytania. Jest on przydatny do upraszczania zลoลผonych zลฤ czeล i podzapytaล, poprawy czytelnoลci i umoลผliwienia zapytaล rekurencyjnych. W mojej poprzedniej roli czฤsto korzystaลem z CTE, aby rozbiฤ wieloetapowฤ logikฤ agregacji na ลatwiejsze w utrzymaniu komponenty.
4) Jak radzisz sobie z dostrajaniem wydajnoลci zapytaล T-SQL?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ chce oceniฤ Twoje doลwiadczenie w optymalizacji zapytaล i rozwiฤ zywaniu problemรณw z wydajnoลciฤ .
Przykลadowa odpowiedลบ: Zaczynam od analizy planu wykonania, aby zidentyfikowaฤ powolne operacje, takie jak skanowanie tabel czy kosztowne sprzฤลผenia. Nastฤpnie sprawdzam brakujฤ ce indeksy, zbฤdne podzapytania lub nieefektywne sprzฤลผenia. Analizujฤ rรณwnieลผ statystyki i stosujฤ strategie indeksowania, takie jak indeksy pokrywajฤ ce lub filtrowane, aby poprawiฤ wydajnoลฤ. Na koniec sprawdzam logikฤ zapytaล, aby upewniฤ siฤ, ลผe wykorzystuje ona operacje oparte na zbiorach, a nie przetwarzanie wiersz po wierszu.
5) Opisz sytuacjฤ, w ktรณrej musiaลeล debugowaฤ wolno dziaลajฤ ce zapytanie w ลrodowisku produkcyjnym. Jakie kroki podjฤ ลeล?
Oczekuje siฤ od kandydata: To pytanie behawioralne ocenia Twoje umiejฤtnoลci rozwiฤ zywania rzeczywistych problemรณw i komunikacji.
Przykลadowa odpowiedลบ: Na poprzednim stanowisku wykonanie zapytania do raportu trwaลo ponad 20 minut. Przeanalizowaลem plan wykonania i odkryลem, ลผe w jednym z ลฤ czeล brakowaลo indeksu w kolumnie klucza obcego. Po utworzeniu indeksu i zaktualizowaniu statystyk czas wykonania zapytania skrรณciล siฤ do poniลผej 30 sekund. Udokumentowaลem rรณwnieลผ poprawkฤ i podzieliลem siฤ niฤ z zespoลem, aby zapobiec podobnym problemom w przyszลoลci.
6) Czym sฤ tabele tymczasowe i zmienne tabelowe i czym siฤ od siebie rรณลผniฤ ?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ sprawdza Twojฤ wiedzฤ na temat opcji tymczasowego przechowywania danych w jฤzyku T-SQL.
Przykลadowa odpowiedลบ: Tabele tymczasowe (#TempTable) sฤ
tworzone w bazie danych tempdb i obsลugujฤ
indeksy, ograniczenia i statystyki. Zmienne tabeli (@TableVar) sฤ
przechowywane w pamiฤci i majฤ
ograniczone wsparcie statystyczne, co czyni je odpowiednimi dla mniejszych zbiorรณw danych. Tabele tymczasowe sฤ
lepsze w przypadku duลผych lub zลoลผonych zbiorรณw danych, natomiast zmienne tabelowe sฤ
bardziej wydajne w przypadku maลych, krรณtkotrwaลych danych.
7) Jak poradziลbyล sobie z obsลugฤ bลฤdรณw i transakcjami w jฤzyku T-SQL?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ sprawdza Twojฤ wiedzฤ na temat integralnoลci transakcji i obsลugi wyjฤ tkรณw.
Przykลadowa odpowiedลบ: uลผywam BEGIN TRANSACTION, COMMIT, ROLLBACK oลwiadczenia zapewniajฤ
ce spรณjnoลฤ danych. Doลฤ
czam rรณwnieลผ TRY...CATCH bloki do poprawnego obsลugiwania bลฤdรณw. Na przykลad:
BEGIN TRY
BEGIN TRANSACTION
-- SQL operations here
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT ERROR_MESSAGE()
END CATCH
Takie podejลcie zapobiega czฤลciowym aktualizacjom danych w przypadku wystฤ pienia bลฤdรณw.
8) Jak uลผywaฤ funkcji okna w jฤzyku T-SQL i czy moลผesz podaฤ przykลad?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ chce oceniฤ Twojฤ biegลoลฤ w formuลowaniu zaawansowanych zapytaล analitycznych.
Przykลadowa odpowiedลบ: Funkcje okienkowe umoลผliwiajฤ wykonywanie obliczeล na zestawach wierszy powiฤ zanych z bieลผฤ cym wierszem bez zwijania danych. Na przykลad:
SELECT EmployeeID, Salary, RANK() OVER (ORDER BY Salary DESC) AS SalaryRank FROM Employees;
Funkcja ta przypisuje pracownikom numery rankingowe na podstawie ich wynagrodzenia, co uลatwia analizฤ trendรณw w zakresie wydajnoลci.
9) Opowiedz mi o zลoลผonym projekcie T-SQL, nad ktรณrym pracowaลeล i jak podszedลeล do jego wyzwaล.
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ zwraca uwagฤ na duลผe doลwiadczenie, umiejฤtnoลฤ rozwiฤ zywania problemรณw i pracฤ zespoลowฤ .
Przykลadowa odpowiedลบ: Na moim ostatnim stanowisku zbudowaลem potok ETL magazynu danych, wykorzystujฤ c procedury skลadowane T-SQL. Wyzwaniem byลa efektywna obsลuga duลผych wolumenรณw danych. Optymalizowaลem zapytania z wykorzystaniem partycjonowanych tabel, obciฤ ลผeล przyrostowych i przetwarzania wsadowego. Wspรณลpracowaลem rรณwnieลผ z zespoลem BI, aby zapewniฤ spรณjnoลฤ projektรณw schematรณw i zwiฤkszyฤ szybkoลฤ raportowania o ponad 40%.
10) Jak poradziลbyล sobie z sytuacjฤ , w ktรณrej napisana przez Ciebie procedura skลadowana spowodowaลaby blokadฤ w ลrodowisku produkcyjnym?
Oczekuje siฤ od kandydata: Osoba przeprowadzajฤ ca rozmowฤ kwalifikacyjnฤ sprawdza Twoje umiejฤtnoลci zarzฤ dzania kryzysowego i ลwiadomoลฤ technicznฤ .
Przykลadowa odpowiedลบ: Najpierw zidentyfikowaลbym impas za pomocฤ
programu SQL Server sys.dm_tran_locks i grafy zakleszczeล. Nastฤpnie analizowaลem kolejnoลฤ dostฤpu do zasobรณw i refaktoryzowaลem procedurฤ, aby uzyskaฤ blokady w spรณjnej kolejnoลci. W mojej poprzedniej pracy wdroลผyลem rรณwnieลผ logikฤ ponawiania prรณb dla transakcji, ktรณrych dotyczy problem, i zaplanowaลem regularne monitorowanie, aby wczeลnie wykrywaฤ podobne wzorce.
