50 parasta T-SQL-haastattelun kysymystä ja vastausta (2026)

T-SQL-haastattelukysymykset ja vastaukset

Valmistaudutko T-SQL-haastatteluun? Aika terävöittää ymmärrystäsi siitä, miten tietokannat todella toimivat pinnan alla. T-SQL-haastattelukysymyksetRekrytoijat arvioivat paitsi syntaksin muistamista myös taitojasi datan käsittelyssä, optimoinnissa ja loogisessa jäsentämisessä.

Tämän alan mahdollisuudet laajenevat jatkuvasti, koska yritykset ovat riippuvaisia ​​datalähtöisistä näkemyksistä. Hakijat, joilla on vahva tekninen asiantuntemus, analyysitaidot ja tosielämän ongelmanratkaisukyvyt, erottuvat joukosta – olivatpa he sitten vastavalmistuneita tai 5–10 vuoden kokemuksella varustettuja ammattilaisia. Kysymysten ja vastausten ymmärtäminen sekä perustasolla että edistyneellä tasolla auttaa tiiminvetäjiä, esimiehiä ja teknisiä kokeneita tunnistamaan vahvat SQL-taidot ja juuritason kokemuksen.

Oppaamme hyödyntää yli 65 rekrytointipäällikön, yli 40 kokeneen kehittäjän ja data-ammattilaisen näkemyksiä eri toimialoilta varmistaen, että se kattaa perus-SQL-logiikan aina edistyneisiin optimointitekniikoihin, joihin tekniset johtajat maailmanlaajuisesti luottavat.
Lue lisää ...

👉 Ilmainen PDF-lataus: T-SQL-haastattelukysymykset ja vastaukset

Tärkeimmät T-SQL-haastattelukysymykset ja vastaukset

1) Mikä on T-SQL ja miten se eroaa tavallisesta SQL:stä?

Transact-SQL (T-SQL) on Microsoftn oma SQL-kielen laajennus, jota käytetään pääasiassa Microsoft SQL ServerSe parantaa standardi-SQL:ää lisäämällä proseduraalisia ohjelmointiominaisuuksia, kuten muuttujia, ehtoja, silmukoita, virheenkäsittelyä ja sisäänrakennettuja funktioita. Vaikka standardi-SQL keskittyy datan käsittelyyn (SELECT, INSERT, UPDATE, DELETE), T-SQL tukee vuonohjauslausekkeita (IF…ELSE, WHILE), tapahtumien käsittelyä ja järjestelmäfunktioita, joiden avulla kehittäjät voivat kirjoittaa monimutkaisia ​​komentosarjoja.

Aspect SQL T-SQL
Omistus ANSI/ISO-standardi Microsoft
Proseduraalinen logiikka rajallinen Tuetut (muuttujat, silmukat)
Virheiden käsittely Vähimmäismäärä TRY…CATCH-tuki
Ensisijainen käyttö Yleiset tietokannat SQL Server

Esimerkiksi:

DECLARE @count INT = 5;
WHILE @count > 0
BEGIN
    PRINT @count;
    SET @count -= 1;
END;

2) Selitä T-SQL:n erityyppiset liitokset esimerkkien avulla.

T-SQL:n liitokset yhdistävät kahden tai useamman taulukon rivejä toisiinsa liittyvien sarakkeiden perusteella. Niiden tyyppien ymmärtäminen on ratkaisevan tärkeää relaatiodatakyselyissä.

Liity tyyppi Tuotetiedot Esimerkki syntaksista
INNER JOIN Palauttaa vain vastaavat rivit SELECT * FROM A INNER JOIN B ON A.id = B.id;
LEFT LIITY Kaikki vasemmalta + osumat oikealta SELECT * FROM A LEFT JOIN B ON A.id = B.id;
OIKEA LIITTYMINEN Kaikki oikealta + osumat vasemmalta SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
TÄYSI LIITTYMINEN Yhdistää VASEN + OIKEA SELECT * FROM A FULL JOIN B ON A.id = B.id;
Ristiliittymä karteesinen tuote SELECT * FROM A CROSS JOIN B;

Käytännön esimerkki: Liittyminen Orders ja Customers selvittääkseen, ketkä asiakkaat ovat tehneet tilauksia käyttämällä INNER JOIN.


3) Mitä ovat Common Table Expressions (CTE) -lausekkeet ja mitkä ovat niiden edut?

Yhteinen taulukkolauseke (CTE) tarjoaa väliaikaisen nimetyn tulosjoukon, johon voidaan viitata taulukon sisällä. SELECT, INSERT, UPDATEtai DELETE lauseke. Se parantaa luettavuutta ja yksinkertaistaa rekursiivisia kyselyitä.

edut:

  • Parantaa kyselyiden selkeyttä ja ylläpitoa.
  • Mahdollistaa rekursion (hierarkkisille tiedoille, kuten organisaatiokaavioille).
  • Auttaa välttämään toistuvia alikyselyitä.
  • Lisää modulaarisuutta suurissa skripteissä.

Esimerkiksi:

WITH EmployeeCTE AS (
    SELECT EmpID, EmpName, ManagerID
    FROM Employees
)
SELECT * FROM EmployeeCTE WHERE ManagerID IS NULL;

4) Miten väliaikaiset taulukot ja taulukkomuuttujat eroavat toisistaan ​​T-SQL:ssä?

Molempia käytetään välitulosten tallentamiseen, mutta niiden toiminta ja laajuus eroavat toisistaan ​​merkittävästi.

Ominaisuus Väliaikainen taulukko (#Temp) Taulukon muuttuja (@TableVar)
Tallennettuna Väliaikainen tietokanta Muisti (rajoitetulla TempDB-käytöllä)
Transaktioiden laajuus Seuraa tapahtumia Riippumaton transaktioista
Indexes Tuetut rajallinen
Suorituskyky Parempi suurille tietojoukoille Parempi pienille tietojoukoille

Esimerkiksi:

DECLARE @TableVar TABLE (ID INT, Name NVARCHAR(50));
INSERT INTO @TableVar VALUES (1, 'Alice');

Käytä väliaikaisia ​​taulukoita, kun työskentelet suurten tietojoukkojen kanssa tai tarvitset indeksejä.


5) Selitä transaktioiden käsite T-SQL:ssä ja niiden elinkaari.

T-SQL-transaktio varmistaa, että toimintosarja suoritetaan yhtenä loogisena yksikkönä. Elinkaari sisältää ALOITA LIIKETOIMINTA, COMMITja palautus.

Vaihe Tuotetiedot
ALOITA LIIKETOIMINTA Aloittaa tapahtuman
SITOA LIIKETOIMET Tallentaa kaikki muutokset pysyvästi
PERUUTUSTAPAHTUMA Kumoaa kaikki toiminnot viimeisimmän BEGIN-komennon jälkeen

Esimerkiksi:

BEGIN TRANSACTION;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccID = 1;
UPDATE Accounts SET Balance = Balance + 100 WHERE AccID = 2;
COMMIT TRANSACTION;

Jos kesken matkan tapahtuu virhe, ROLLBACK ylläpitää tietojen eheyttä.


6) Mitä eroa on DELETE-, TRUNCATE- ja DROP-komennoilla?

Komento Toiminto Hintojen lasku Vaikuttaa rakenteeseen Nopeus
POISTA Poistaa tiettyjä rivejä Kyllä Ei hitaampi
KATKAISTA Poistaa kaikki rivit Ei (yleensä) Ei Nopea
DROP Poistaa koko taulukon Ei Kyllä Nopein

Esimerkiksi:

DELETE FROM Employees WHERE Department = 'HR';
TRUNCATE TABLE TempData;
DROP TABLE OldLogs;

Käyttää DELETE valikoivaa poistamista varten, TRUNCATE raivausta varten ja DROP poistamaan pöydän kokonaan.


7) Miten virheiden käsittely toimii T-SQL:ssä?

T-SQL tarjoaa jäsennellyn virheenkäsittelyn TRY...CATCH lohko, jonka avulla kehittäjät voivat hallita ajonaikaisia ​​virheitä sujuvasti.

Esimerkiksi:

BEGIN TRY
    INSERT INTO Employees VALUES (1, 'John');
END TRY
BEGIN CATCH
    PRINT 'Error: ' + ERROR_MESSAGE();
END CATCH;

Tämä lähestymistapa eristää virheellisen toiminnon ja estää tapahtumaa vahingoittamasta tietojen eheyttä. Kehittäjät voivat myös käyttää järjestelmän toimintoja, kuten ERROR_NUMBER() or ERROR_SEVERITY() diagnostiikkaa varten.


8) Millä eri tavoilla T-SQL-kyselyiden suorituskykyä voidaan optimoida?

Optimointiin kuuluu SQL-suunnittelun, indeksoinnin ja suoritusstrategioiden hienosäätö.

Tärkeimmät tekniikat:

  1. Käyttää asianmukainen indeksointi usein haettuihin sarakkeisiin.
  2. Välttää SELECT * — määritä sarakkeet erikseen.
  3. Käyttää joukkoon perustuvat operaatiot kursoreiden sijaan.
  4. Analysoi toteutussuunnitelmia SQL Server Management Studion avulla.
  5. Käyttää Liittyy tehokkaasti oikeilla PÄÄLLÄ-olosuhteilla.
  6. Vähentää sisäkkäiset alikyselyt; mieluummin CTE-arvoja tai temp-taulukoita.

T-SQL:n suorituskyvyn virittämiseen kuuluu myös kyselyiden suoritustilastojen seuranta käyttämällä SET STATISTICS IO ON.


9) Mitä ovat ikkunafunktiot ja milloin niitä tulisi käyttää?

Ikkunafunktiot suorittavat laskutoimituksia joukolle nykyiseen riviin liittyviä rivejä tiivistämättä niitä yhdeksi tulokseksi. Ne ovat hyödyllisiä sijoittelussa, juoksevissa summissa ja liukuvissa keskiarvoissa.

Esimerkiksi:

SELECT
    EmployeeID,
    Salary,
    RANK() OVER (ORDER BY Salary DESC) AS RankBySalary
FROM Employees;

Yleisiä toimintoja ovat mm. RANK(), ROW_NUMBER(), DENSE_RANK()ja SUM() OVER().

Nämä ovat ratkaisevan tärkeitä analyyttisissä työkuormissa, joissa tarvitaan sekä koostettua että rivitason dataa.


10) Selitä klusteroitujen ja klusteroimattomien indeksien ero.

Ominaisuus Clustered Index Ei-Clustered Index
Levytila Järjestää taulukon fyysisesti uudelleen Erillinen rakenne
Määrä taulukkoa kohden yksi moninkertainen
Suorituskyky Nopeampi aluekyselyissä Nopeampi tietyissä hauissa
Käyttöesimerkki Pääavain Toissijaiset haut

Esimerkiksi:

CREATE CLUSTERED INDEX IX_EmployeeID ON Employees(EmployeeID);
CREATE NONCLUSTERED INDEX IX_Dept ON Employees(Department);

Oikean indeksityypin valinta vaikuttaa suoraan kyselyn suoritusnopeuteen ja tallennustehokkuuteen.


11) Mitä ovat tallennetut proseduurit T-SQL:ssä ja miksi niitä käytetään?

Tallennettu proseduuri on esikäännetty kokoelma yhtä tai useampaa SQL-lausetta, jotka on tallennettu palvelimelle. Ne parantavat suorituskykyä, tietoturvaa ja uudelleenkäytettävyyttä mahdollistamalla logiikan kapseloinnin ja sen suorittamisen toistuvasti ilman uudelleenkääntämistä. Tallennetut proseduurit vähentävät verkkoliikennettä ja tukevat dynaamisen suorituksen parametreja.

Esimerkiksi:

CREATE PROCEDURE GetEmployeeDetails @Dept NVARCHAR(50)
AS
BEGIN
    SELECT EmpName, Position FROM Employees WHERE Department = @Dept;
END;

Hyödyt:

  • Parempi suorituskyky esikääntämisen ansiosta.
  • Parannettu tietoturva hallitun suorituksen avulla.
  • Helpompi koodin ylläpito ja modularisointi.

12) Selitä tallennetun proseduurin ja funktion välinen ero T-SQL:ssä.

Aspect Tallennettu menettely Toiminto
Palautustyyppi Voi palauttaa useita arvoja Täytyy palauttaa yksi arvo tai taulukko
Käytä SELECT-komennossa Ei sallittu Sallittu
Virheiden käsittely TRY…CATCH-tuki rajallinen
Teloitus Suoritettu kautta EXEC Käytetään SQL:n kanssa samassa rivissä
Tapahtuman valvonta Tuetut Ei tuettu

Esimerkiksi:

  • menettely: EXEC GetEmployeeDetails 'HR';
  • Toiminto: SELECT dbo.GetSalary(101);

Funktiot sopivat erinomaisesti laskelmiin; proseduurit taas sopivat paremmin liiketoimintalogiikkaan ja datan käsittelyyn.


13) Mikä on trigger T-SQL:ssä ja mitä tyyppejä sillä on?

Liipaisin on erityinen tallennettu proseduuri, joka suoritetaan automaattisesti vastauksena tiettyihin tapahtumiin (INSERT, UPDATE, DELETE) taulukossa tai näkymässä. Liipaisimia käytetään liiketoimintasääntöjen valvontaan, muutosten auditointiin tai viite-eheyden ylläpitämiseen.

Tyyppi Tuotetiedot
JÄLKEEN Liipaisin Syttyy tapahtuman päätyttyä
Liipaisimen SIJAAN Suoritetaan laukaisevassa tapahtumassa

Esimerkiksi:

CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    PRINT 'New employee record added!';
END;

Vältä liipaisimien liiallista käyttöä – ne voivat vaikuttaa suorituskykyyn ja vaikeuttaa virheenkorjausta.


14) Miten NULL-arvoja käsitellään T-SQL:ssä?

NULL edustaa puuttuvaa tai tuntematonta dataa. T-SQL tarjoaa useita funktioita sen tehokkaaseen käsittelyyn:

  • ISNULL(expression, replacement) → korvaa NULL:n oletusarvolla.
  • COALESCE(expression1, expression2, ...) → palauttaa ensimmäisen ei-NULL-arvon.
  • NULLIF(expression1, expression2) → palauttaa NULL-arvon, jos lausekkeet ovat yhtä suuret.

Esimerkiksi:

SELECT ISNULL(Manager, 'No Manager') AS ManagerName FROM Employees;

Parhaat käytännöt: Ota aina huomioon NULL-arvot liitoksissa ja ehdoissa odottamattomien tulosten välttämiseksi.


15) Mitä ovat kursorit T-SQL:ssä ja milloin niitä tulisi välttää?

Kohdistimen avulla kyselytuloksia voidaan käsitellä rivi riviltä – tämä on hyödyllistä monimutkaisessa logiikassa, jossa joukkoon perustuvat operaatiot eivät riitä. Kohdistimet ovat kuitenkin hidas ja resursseja vaativa verrattuna joukkoon perustuviin vaihtoehtoihin.

Esimerkiksi:

DECLARE emp_cursor CURSOR FOR SELECT EmpName FROM Employees;
OPEN emp_cursor;
FETCH NEXT FROM emp_cursor;
-- process
CLOSE emp_cursor;
DEALLOCATE emp_cursor;

Haitat:

  • Lisääntynyt muistin käyttö.
  • Huono skaalautuvuus.
  • Vähentynyt suorituskyky.

Vaihtoehto: Käytä taulukkoliitoksia, alikyselyitä tai ikkunafunktioita aina kun mahdollista.


16) Selitä MERGE-lauseke ja sen käyttötapaukset.

MERGE lauseke suorittaa INSERT, PÄIVITYSja POISTA toiminnot yhdellä komennolla – ihanteellinen kahden taulukon synkronointiin.

Syntaksiesimerkki:

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;

Käytä koteloita:

  • Tietovarastointi (synkronointivaihe ja kohdetaulukot).
  • Lisääntyvä tiedon lataus.
  • Tarkastus- tai dimensiotaulukoiden ylläpito.

17) Mitä erityyppisiä käyttäjän määrittämiä funktioita (UDF) on T-SQL:ssä?

Tyyppi Tuotetiedot esimerkki
skalaari Palauttaa yhden arvon CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
Inline Table-Arvot Palauttaa taulukon yhden arvon kautta SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
Monilauseinen taulukkoarvoinen Palauttaa taulukon useiden lausekkeiden jälkeen Hyödyllinen monimutkaiselle logiikalle

Funktiot edistävät koodin uudelleenkäyttöä ja parantavat modulaarista kyselysuunnittelua.

Niiden tulisi olla deterministisiä (palauttaa sama tulos samalla syötteellä) aina kun mahdollista suorituskyvyn optimoimiseksi.


18) Mitä on normalisointi, ja mitkä ovat sen edut ja haitat?

Normalisointi on prosessi, jossa tietoja järjestetään tietokannassa redundanssin minimoimiseksi ja eheyden parantamiseksi. Se tarkoittaa taulukoiden jakamista pienempiin, toisiinsa liittyviin kokonaisuuksiin.

Normaali muoto Sääntö esimerkki
1NF Poista toistuvat ryhmät Pilkulla erotettujen tietojen jakaminen
2NF Poista osittaiset riippuvuudet Varmista täysi riippuvuus ensisijaisesta avaimesta
3NF Poista transitiiviset riippuvuudet Siirretyt johdetut ominaisuudet

edut:

  • Vähentää redundanssia.
  • Varmistaa datan johdonmukaisuuden.
  • Yksinkertaistaa huoltoa.

Haitat:

  • Monimutkaiset liitokset.
  • Analyyttisten kyselyiden mahdolliset suorituskyvyn kompromissit.

19) Mitä erilaisia ​​rajoitteita T-SQL:ssä on?

Rajoitukset valvovat tietojen eheyttä koskevia sääntöjä taulukon sisällä.

Rajoite Tarkoitus esimerkki
PÄÄAVAIN Tunnistaa jokaisen rivin yksilöllisesti PRIMARY KEY (EmpID)
ULKOMAAN AVAIN Linkittää kaksi taulukkoa FOREIGN KEY (DeptID)
UNIQUE Varmistaa yksilölliset sarakearvot UNIQUE (Email)
TARKISTAA Vahvistaa tietoalueen CHECK (Age >= 18)
DEFAULT Tarjoaa oletusarvot DEFAULT GETDATE()

Rajoitukset varmistavat tarkkuuden ja luotettavuuden, mikä vähentää laajan sovellustason validoinnin tarvetta.


20) Miten T-SQL:ssä hallitaan käyttöoikeuksia ja tietoturvaa?

TSQL hallitsee tietokannan suojausta kirjautumiset, käyttäjät, roolit ja käyttöoikeudet.

Käyttöoikeuksia voidaan myöntää tai peruuttaa objekti- tai skeematasolla.

Esimerkiksi:

CREATE LOGIN John WITH PASSWORD = 'Strong@123';
CREATE USER John FOR LOGIN John;
GRANT SELECT, INSERT ON Employees TO John;

Parhaat käytännöt:

  • Käyttää roolit suorien käyttäjäoikeuksien sijaan.
  • Vältä käyttöä sa tai sovellusten järjestelmätilit.
  • Tarkista käyttöoikeudet säännöllisesti sys.database_permissions.

Asianmukainen käyttöoikeuksien hallinta varmistaa pienimpien käyttöoikeuksien periaatteen ja turvallisuuskäytäntöjen noudattamisen.


21) Mitkä ovat T-SQL:n eri transaktioiden eristämistasot?

Transaktioiden eristämistasot määrittävät, miten yksi tapahtuma eristetään muista – tasapainottaminen johdonmukaisuus samanaikaisuudenSQL Server tukee seuraavia:

Eristystaso Tuotetiedot Likainen lukukokemus Toistumaton luku Phantom Read
LUE SITOUMATTOMASTI Lukee sitomatonta dataa Kyllä Kyllä Kyllä
LUE SITOUTUNUT Oletusarvo; lukot estävät likaiset lukemiset Ei Kyllä Kyllä
TOISTETTU LUE Estää datan muuttamisen ennen vahvistusta Ei Ei Kyllä
SARJOITTAVA Täydellinen eristys; korkein lukitus Ei Ei Ei
PIKAKUVA Käyttää versiointia, ei lukitusta Ei Ei Ei

Esimerkiksi:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- your code
COMMIT;

Käyttää PIKAKUVA korkean samanaikaisuuden järjestelmille eston minimoimiseksi tinkimättä johdonmukaisuudesta.


22) Mikä on lukkiutuminen SQL Serverissä ja miten sen voi estää?

A umpikuja Lukkiutumisongelma syntyy, kun kahdella transaktiolla on toistensa tarvitsemat lukitukset, mikä johtaa lukkiutumisongelmaan. SQL Server tunnistaa automaattisesti toisen transaktion ja lopettaa sen lukkiutumisongelman uhrina.

Esimerkki skenaario:

  • Transaktio A lukitsee taulukon 1 ja odottaa sitten taulukkoa 2.
  • Transaktio B lukitsee taulukon 2 ja odottaa sitten taulukkoa 1.

Ehkäisytekniikat:

  1. Käytä resursseja samassa järjestyksessä.
  2. Pidä tapahtumat lyhyinä.
  3. Käytä sopivia eristystasoja.
  4. Vältä käyttäjien vuorovaikutusta tapahtumien sisällä.

Käytä SQL Profileria tai Extended Eventsiä tracumpikujat reaaliajassa.


23) Selitä pessimistisen ja optimistisen samanaikaisuuden hallinnan ero.

Tyyppi Tuotetiedot Lukitusmekanismi Käytä asiaa
Pessimistinen Lukitsee tiedot tapahtuman aikana Voimakas lukitus Konfliktipitoiset ympäristöt
Optimistinen Käyttää riviversiointia, tarkistaa ennen commit-toimintoa Minimaalinen lukitus Paljon luettavaa vaativat, vähän ristiriitoja aiheuttavat työkuormat

Esimerkiksi:

  • Pessimistinen: Oletusarvo READ COMMITTED lukitus.
  • Optimistinen: SNAPSHOT eristäminen riviversioinnilla.

Optimistinen samanaikaisuus parantaa suorituskykyä järjestelmissä, joissa on suuria lukuoperaatioita ja harvoin päivityksiä.


24) Miten voit analysoida ja optimoida hitaasti toimivaa T-SQL-kyselyä?

  1. Tarkista toteutussuunnitelma: Tunnista skannaukset, puuttuvat indeksit ja kalliit toiminnot.
  2. Käytä SET STATISTICS IO/TIME -funktiota: Analysoi I/O- ja CPU-käyttöä.
  3. Vältä kursoreita ja silmukoita: Korvaa joukkoon perustuvilla operaatioilla.
  4. Indeksin optimointi: Lisää tai järjestele uudelleen fragmentoituneita indeksejä.
  5. Parametrien nuuhkiminen: Käyttää OPTION (RECOMPILE) uusien suunnitelmien luomiseksi.

Esimerkiksi:

SET STATISTICS TIME ON;
SELECT * FROM Orders WHERE CustomerID = 123;

Hitaiden kyselyiden säännöllinen seuranta Dynaamiset hallintanäkymät (DMV) pitää sys.dm_exec_query_stats on paras käytäntö.


25) Mikä on dynaaminen SQL ja mitkä ovat sen edut ja riskit?

Dynaaminen SQL mahdollistaa SQL-lauseiden dynaamisen muodostamisen ajonaikana muuttujien avulla.

Esimerkiksi:

DECLARE @sql NVARCHAR(MAX);
SET @sql = 'SELECT * FROM Employees WHERE Dept = ''' + @Dept + '''';
EXEC(@sql);

edut:

  • Joustavuutta muuttuvien taulukoiden nimille tai suodattimille.
  • Uudelleenkäytettävä useissa skeemoissa.

Haitat:

  • Haavoittuvainen SQL Injection jos sitä ei ole parametrisoitu.
  • Vaikeampi debugata ja ylläpitää.

Käytä aina sp_executesql turvallisuusparametreilla.


26) Mitä ovat väliaikaiset objektit T-SQL:ssä ja miten ne eroavat toisistaan?

Väliaikaiset esineet säilytetään Väliaikainen tietokanta ja auttaa hallitsemaan välidataa.

Kohteen tyyppi Laajuus esimerkki
Paikallinen lämpötilataulukko Istuntokohtainen CREATE TABLE #TempTable
Globaali lämpötilataulukko Näkyvissä kaikissa istunnoissa CREATE TABLE ##TempGlobal
Taulukon muuttuja Eräkohtainen DECLARE @Temp TABLE (...)

Parhaat käytännöt:

  • Suosi taulukkomuuttujia pienemmille tietojoukoille.
  • Käytä paikallisia väliaikaisia ​​taulukoita suuremmille indeksointitarpeille.
  • Poista väliaikaiset taulukot erikseen resurssien vapauttamiseksi nopeammin.

27) Miten ikkunan osiointifunktioita käytetään T-SQL:ssä?

Osiointi mahdollistaa ikkunafunktioiden soveltamisen tiettyihin tietojoukkoihin.

Esimerkiksi:

SELECT
    Department,
    EmpName,
    Salary,
    RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS RankInDept
FROM Employees;

Hyödyt:

  • Laskee tehokkaasti sijoitukset, kokonaissummat ja keskiarvot ryhmäkohtaisesti.
  • Poistaa tarpeen itseliitoksille tai alikyselyille.

Käytä koteloita: Palkkaluokat, myyntisijoitukset ja trendianalytiikka.


28) Mitä eroa on UNIONilla ja UNION ALLilla T-SQL:ssä?

lauseke Kopiot Suorituskyky Käytä asiaa
UNIONIN Poistaa kaksoiskappaleet Hitaampi (käyttää lajittelua/erottelua) Tulosjoukkojen yhdistäminen siististi
UNIONIN KAIKKI Säilyttää kaksoiskappaleet Nopeampi Tietojen yhdistäminen tai migraatio

Esimerkiksi:

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

Mieluummin UNION ALL kun kaksoiskappaleet ovat hyväksyttäviä ja suorituskyvyllä on merkitystä.


29) Miten JSON-datan kanssa työskennellään T-SQL:ssä?

SQL Server tukee natiiveja JSON-funktioita JSON-datan jäsentämiseen ja luomiseen.

Esimerkiksi:

DECLARE @json NVARCHAR(MAX) = '{"Name":"John","Age":30}';
SELECT JSON_VALUE(@json, '$.Name') AS Name;

Keskeiset toiminnot:

  • JSON_VALUE() → Entinentracts-skalaariarvot.
  • JSON_QUERY() → Entinentracts-objektit/taulukot.
  • OPENJSON() → Jäsentää JSON-tiedoston riveiksi.
  • FOR JSON → Muuntaa kyselyn tulokset JSON-muotoon.

Hyödyllinen API-rajapinnoille, hybridijärjestelmille ja NoSQL-integraatioille.


30) Miten TempDB:tä voi hallita ja optimoida SQL Serverissä?

TempDB on järjestelmätietokanta, joka on kriittinen väliaikaisen tallennuksen ja versioinnin kannalta. Huono hallinta voi aiheuttaa vakavia suorituskykyongelmia.

Optimointitekniikat:

  1. Sijoita TempDB nopealle tallennustilalle (SSD).
  2. Esimääritä data- ja lokitiedostojen koko.
  3. Käytä useita datatiedostoja (yksi suorittimen ydintä kohden, enintään 8).
  4. Näyttö, jossa on sys.dm_db_file_space_usage.
  5. Puhdista väliaikaiset esineet säännöllisesti.

Esimerkkikysely:

SELECT * FROM sys.dm_db_file_space_usage;

TempDB:n ennakoiva hallinta välttää kilpailun allokointisivuilla ja parantaa tietokannan kokonaisläpivirtausnopeutta.


31) Mitä ovat kyselyvihjeet T-SQL:ssä, ja milloin niitä tulisi käyttää?

Kyselyvihjeet ohjeistavat SQL Server -optimoijaa muuttamaan normaalia suoritussuunnitelmaansa.

Niitä tulisi käyttää säästeliäästi — vain silloin, kun ymmärrät täysin datan jakelun ja suorituksen kontekstin.

Esimerkiksi:

SELECT * FROM Orders WITH (NOLOCK) WHERE CustomerID = 102;

Yleisiä vinkkejä:

  • NOLOCK: Lukee ilman lukituksia (voi lukea sitomatonta dataa).
  • FORCESEEK: Pakottaa indeksin haun skannauksen sijaan.
  • OPTIMIZE FOR: Ohjaa parametriarvoja suunnitelman luomista varten.
  • RECOMPILE: Pakottaa uudelleenkääntämisen jokaisella suorituksella.

Varoitus: Vihjeiden liiallinen käyttö voi heikentää suorituskykyä datan kasvaessa tai kuvioiden muuttuessa. Käytä niitä vain silloin, kun optimoijan suunnitelma on todistettavasti tehoton.


32) Selitä suoritussuunnitelmien välimuistin käsite SQL Serverissä.

SQL Server tallentaa suoritussuunnitelmat välimuistiin, jotta toistuvien kyselyiden uudelleenkääntämistä ei tarvita.

Kun sama kysely suoritetaan uudelleen identtisillä rakenteilla, se käyttää välimuistissa olevaa suunnitelmaa uudelleen, mikä parantaa suorituskykyä.

Esimerkiksi:

EXEC GetCustomerOrders @CustomerID = 101;

Hyödyt:

  • Vähentää suorittimen kuormitusta.
  • Parantaa vasteajan johdonmukaisuutta.

Ongelmat:

  • Parametrien nuuhkiminen voi johtaa tehottomiin suunnitelmiin.
  • Välimuistin paisuminen voi kuluttaa muistia.

lieventäminen: Käyttää OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN jossa parametrit vaihtelevat suuresti.


33) Mitä on parametrien nuuhkiminen ja miten se voi vaikuttaa suorituskykyyn?

Parametrien nuuhkimista tapahtuu, kun SQL Server käyttää kyselyn ensimmäisen suorituksen parametriarvoja luodakseen suunnitelman, jota sitten käytetään uudelleen – vaikka se ei olisikaan optimaalinen myöhempiä suorituksia varten.

Esimerkki skenaario:

  • Ensimmäinen suoritus: pieni tietojoukko → indeksin hakusuunnitelma.
  • Seuraava suoritus: suuri tietojoukko → samaa suunnitelmaa käytetään uudelleen, mutta hitaasti.

Ratkaisut:

  1. Käyttää OPTION (RECOMPILE) uusien suunnitelmien tekemiseen.
  2. Käytä paikallisia muuttujia parametriarvojen peittämiseen.
  3. Käyttää OPTIMIZE FOR or OPTIMIZE FOR UNKNOWN.

Parametrien nuuhkiminen on yksi T-SQL:n arvaamattoman suorituskyvyn suurimmista syistä käytännössä.


34) Miten kyselyiden suorituskykyä valvotaan ja analysoidaan SQL Serverissä?

Voit käyttää useita työkaluja ja DMV:itä suorituskyvyn profilointiin ja hienosäätöön:

  • Toteutussuunnitelmat: Ctrl + M SSMS:ssä tai sys.dm_exec_query_plan.
  • Ajoneuvohallintokeskukset:

    • sys.dm_exec_query_stats – Suoritin ja kesto.
    • sys.dm_exec_sql_text – SQL-teksti.
    • sys.dm_exec_requests – Aktiiviset kyselyt.
  • Suorituskyvyn valvonta ja laajennetut tapahtumat pitkäaikaiseksi trackuningas.

Esimerkiksi:

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) Selitä tilastojen rooli kyselyoptimoinnissa.

Tilastot kuvaavat datan jakaumaa (esim. erilliset arvot, tiheys, histogrammi), jota optimoija käyttää kardinaalisuuden arvioimiseen.

Jos tilastot ovat vanhentuneita, SQL Server saattaa valita huonoja suunnitelmia.

Avainkomennot:

  • UPDATE STATISTICS Employees;
  • sp_updatestats;
  • Automaattisen päivityksen asetus: oletuksena käytössä.

Parhaat käytännöt:

  • Pitää AUTO_UPDATE_STATISTICS käytössä.
  • Suurten taulukoiden tapauksessa ajoita manuaaliset päivitykset.
  • Käyttää FULLSCAN kriittisille indekseille.

Vanhentuneet tilastot ovat suorituskyvyn hiljainen tappaja.


36) Mitä eroa on indeksihaulla ja indeksitarkistuksella?

OperaTUKSEN Tuotetiedot Suorituskyky Käytä asiaa
Hakemistohaku Navigoi suoraan vastaaviin riveihin Nopea Erittäin valikoivat kyselyt
Indeksiskannaus Lukee kaikki hakemistomerkinnät peräkkäin hitaampi Alhaisen selektiivisyyden kyselyt

Esimerkiksi:

SELECT * FROM Orders WHERE OrderID = 123; -- Seek
SELECT * FROM Orders WHERE Status = 'Active'; -- May Scan

Optimointivinkki: Luo suodatettuja tai peittäviä indeksejä muuttaaksesi skannaukset hakuiksi.


37) Selitä osioidut taulukot ja niiden edut.

Osiointi jakaa suuren taulukon pienempiin, hallittaviin osiin (osioihin), usein aluesarakkeen (kuten päivämäärän) perusteella.

Hyödyt:

  • Nopeampi tiedonhallinta (lataus/purku osioittain).
  • Parannettu kyselyiden suorituskyky suurissa tietojoukoissa.
  • Rinnakkaiskäsittely osioiduille skannauksille.

Esimerkiksi:

CREATE PARTITION FUNCTION pfRange (DATETIME)
AS RANGE LEFT FOR VALUES ('2022-12-31', '2023-12-31');

Käyttötapa: Tietovarastot, jotka käsittelevät miljardeja rivejä ja joissa vanhat osiot voidaan arkistoida tehokkaasti.


38) Mitä ovat rekursiiviset CTE:t ja mitä rajoituksia niillä on?

A rekursiivinen yhteinen taulukkolauseke (CTE) viittaa itseensä, tyypillisesti hierarkkisissa tiedoissa, kuten organisaatiokaavioissa tai puurakenteissa.

Esimerkiksi:

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;

Rajoitukset:

  • Oletusarvoinen rekursiorajoitus = 100 tasot.
  • Voi aiheuttaa suorituskykyongelmia, jos rekursiosyvyys on suuri.
  • Käyttää OPTION (MAXRECURSION n) rajan säätämiseen.

39) Miten SQL Server käsittelee virheitä sisäisesti tapahtumissa?

Kun transaktiossa tapahtuu virhe:

  • Jos se on vakava (taso > 20), yhteys katkeaa välittömästi.
  • If ei-vakava, se voidaan saada kiinni TRY...CATCH.

Esimerkiksi:

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;

Paras harjoitus: Kääri DML aina TRY…CATCH-käskyjen sisään virheiden sietokyvyn parantamiseksi.


40) Mitä edistyneitä T-SQL-suorituskyvyn viritystekniikoita on olemassa?

  1. Vältä skalaarisia UDF-funktioita SELECTissä — riviin integroidut funktiot ovat nopeampia.
  2. Käytä suodatettuja indeksejä indeksin koon pienentämiseksi.
  3. Hyödynnä muistissa olevaa OLTP:tä (Hekaton) korkean samanaikaisuuden järjestelmille.
  4. Eräajotilan suorittaminen saraketallennusindekseistä analytiikkaa varten.
  5. Poista implisiittiset konversiot yhdistämällä tietotyyppejä.
  6. Käytä kyselysäilöä vertailla historiallisia suunnitelmia.

Esimerkki implisiittisten muunnosten havaitsemiseksi:

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%';

Suorituskyvyn hienosäätö on jatkuva prosessi – ei kertaluonteinen tapahtuma.


41) Miten tunnistaisit SQL Serverin resursseja eniten kuluttavat kyselyt?

Voit tunnistaa kalliit kyselyt dynaamisten hallintanäkymien (DMV) avulla, jotka tallentavat historiallisia suoritustilastoja.

Esimerkiksi:

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;

Keskeiset mittarit:

  • AvgCPUKeskimääräinen suorittimen käyttöaika suoritusta kohden.
  • AvgReadsI/O-intensiteetti.
  • AvgDurationSuoritusviive.

Tämä lähestymistapa auttaa tietokannan ylläpitäjiä eristämään raskaat kyselyt ennen kuin käyttäjät edes huomaavat suorituskyvyn heikkenemistä.


42) Miten SQL Serverissä voi havaita ja korjata puuttuvia indeksejä?

SQL Server automaattisesti tracks puuttuu indeksi-suosituksia ajoneuvohallintoviranomaisten kautta.

Esimerkiksi:

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;

Parhaat käytännöt:

  • Priorisoi korkean hakutuloksen omaavat indeksit ensin.
  • Tarkista toteutussuunnitelmien avulla ennen luomista.
  • Vältä yli-indeksointia — se hidastaa kirjoituksia.

43) Mitä eroa on tietokannan peilauksella, replikoinnilla ja lokien lähettämisellä?ping?

Ominaisuus Tarkoitus Real-time Vara Monimutkaisuus
Peilaus Korkean käytettävyyden tietokannan kopio Kyllä automaattisesti Keskikova
replikointi Tiedon jakelu tietokantojen välillä Osittainen manuaalinen Korkea
Tukkilaivaping Varmuuskopioihin perustuva DR-strategia Ei manuaalinen Matala

Käyttöohjeet:

  • Peilaus → OLTP-korkean käytettävyyden järjestelmät.
  • Replikointi → Hajautettu raportointi.
  • Tukkilaivaping → Katastrofien jälkeiset palautusasetukset.

44) Miten vianmäärität SQL Serverin esto-ongelmia?

Esto tapahtuu, kun yksi prosessi pitää hallussaan lukkoja, joita toinen prosessi tarvitsee.

Esteiden tunnistamiseksi:

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;

Ratkaisut:

  • Lyhennä transaktion kestoa.
  • Käytä tilannevedoksen eristämistä.
  • Hienosäädä kyselyitä lukituksen minimoimiseksi.
  • Tunnista pitkään jatkuneet avoimet tapahtumat DBCC OPENTRAN.

45) Miten SQL Serverin kyselysäilö auttaa suorituskyvyn virittämisessä?

Kyselytallennus tallentaa kyselytekstin, suunnitelmat ja suorituksenaikaiset tilastot, mikä mahdollistaa suunnitelman regressioanalyysi.

Se auttaa tunnistamaan, milloin kyselystä tulee yhtäkkiä hidas suunnitelmamuutosten vuoksi.

Esimerkiksi:

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;

Hyödyt:

  • Vertaile historiallisia suunnitelmia.
  • Pakota hyvät suunnitelmat.
  • Track:n suorituskyvyn trendit ajan kuluessa.

46) Miten SQL-injektiota voidaan estää T-SQL-sovelluksissa?

Ensisijaiset puolustusmekanismit:

  1. Käyttää parametrisoidut kyselyt kautta sp_executesql.
  2. Vahvista ja puhdista kaikki käyttäjän syötteet.
  3. Vältä dynaamista SQL-ketjutusta.
  4. Käyttää vähiten etuoikeusperiaate tietokantatileille.

Turvallinen esimerkki:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'SELECT * FROM Employees WHERE Dept = @Dept';
EXEC sp_executesql @sql, N'@Dept NVARCHAR(50)', @Dept = 'HR';

Vaikka SQL-injektio on sovellustason menetelmä, Tietokannan ylläpitäjien on tarkastettava tallennetut proseduurit ja lokit parametritonta suoritusta varten.


47) Miten Extended Events -toimintoa käytetään syvälliseen suorituskyvyn seurantaan?

Extended Events (XEvents) on kevyt suorituskyvyn seurantakehys – moderni vaihtoehto SQL:lle Trace.

Esimerkiksi:

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;

Käytä koteloita:

  • Valvo paljon suorittimen tehoa käyttäviä kyselyitä.
  • Tallenteen umpikujat tai puuttuvat indeksit.
  • Profiloi pitkäkestoisia lauseita tuotannossa minimaalisilla lisäkustannuksilla.

48) Mitä ovat suodatetut indeksit ja milloin niitä tulisi käyttää?

Suodatettu indeksi indeksoi vain osan riveistä, jotka täyttävät suodatusehdon – parantaen suorituskykyä ja vähentäen tallennustilaa.

Esimerkiksi:

CREATE INDEX IX_ActiveEmployees
ON Employees (Department)
WHERE Status = 'Active';

Hyödyt:

  • Pienempi indeksin koko.
  • Nopeampi huolto.
  • Optimoitu valikoiville kyselyille.

Paras: Sarakkeet, joissa on vino datajakauma (esim. aktiiviset vs. ei-aktiiviset tietueet).


49) Miten tietoja siirretään turvallisesti SQL Server -ympäristöjen välillä?

Turvallinen tiedonsiirto edellyttää suunnittelua johdonmukaisuus, seisokkiaika ja palautus.

Parhaat käytännöt:

  1. Käyttää transaktionaalinen replikointi or muutostietojen tallennus (CDC) live-synkronointia varten.
  2. Poista rajoitteet ja liipaisimet väliaikaisesti käytöstä.
  3. Käyttää BCP or SSIS joukkotiedonsiirtoa varten.
  4. Tarkista rivien määrät ja tarkistussummat.
  5. Suorita aina siirron jälkeiset eheystarkistukset (DBCC CHECKDB).

Esimerkiksi:

bcp Database.dbo.Table out TableData.dat -n -S Server -T

Siirtokomentosarjojen testaaminen testiympäristössä ei ole neuvoteltavissa.


50) Miten tunnistat ja korjaat parametriherkkien kyselyiden (PSQ) ongelmat?

Parametriherkät kyselyt toimivat epäjohdonmukaisesti parametriarvojen perusteella – yleinen tosielämän haaste.

tunnistus: Käyttää Kyselykauppa or sys.dm_exec_query_stats useiden suunnitelmien tunnistamiseksi yhdelle kyselylle.

Korjausstrategiat:

  1. Käyttää VAIHTOEHTO (KOMPILE UUDELLEEN) jokaista suoritusta varten.
  2. Käyttää OPTIMOI TUNTEMATTOMILLE yleisen suunnitelman luomiseksi.
  3. luoda suunnitteluoppaat optimaalisten suorituspolkujen valvomiseksi.
  4. Käyttää kyselyvihjeitä vain tarvittaessa.

Parametriherkät ongelmat vaativat tasapainottelua suunnitelman vakauden ja suorituskyvyn ennustettavuuden välillä.

🔍 Tärkeimmät T-SQL-haastattelukysymykset tosielämän skenaarioilla ja strategisilla vastauksilla

1) Mitä eroa on INNER JOINin ja LEFT JOINin välillä T-SQL:ssä?

Ehdokkaalta odotetaan: Haastattelija haluaa arvioida ymmärrystäsi liitosoperaatioista ja siitä, miten datasuhteita hallitaan SQL-kyselyissä.

Esimerkki vastauksesta: An INNER JOIN palauttaa vain rivit, joilla on vastaavat arvot molemmissa taulukoissa, kun taas LEFT JOIN palauttaa kaikki rivit vasemmasta taulukosta sekä vastaavat rivit oikeasta taulukosta. Jos osumia ei löydy, oikean taulukon sarakkeille palautetaan NULL-arvot. Tämä ero on ratkaisevan tärkeä työskenneltäessä osittaisten tai valinnaisten suhteiden kanssa tietokannoissa.


2) Miten tunnistaisit ja poistaisit päällekkäiset tietueet taulukosta T-SQL:ssä?

Ehdokkaalta odotetaan: Haastattelija haluaa nähdä kykysi käyttää ikkunafunktioita ja CTE:itä datan laatuongelmien ratkaisemiseksi.

Esimerkki vastauksesta: Käyttäisin Common Table Expressionia (CTE) yhdistettynä ROW_NUMBER() funktio kaksoiskappaleiden tunnistamiseksi. Esimerkiksi:

WITH CTE AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS rn
  FROM MyTable
)
DELETE FROM CTE WHERE rn > 1;

Tämä lähestymistapa auttaa poistamaan kaksoiskappaleita säilyttäen samalla yhden yksilöllisen tietueen kullekin ryhmälle.


3) Voitko selittää, mikä on CTE (Common Table Expression) ja milloin käyttäisit sitä?

Ehdokkaalta odotetaan: Haastattelija tarkistaa tietämystäsi kyselyjen jäsentämisestä ja väliaikaisista tulosjoukoista.

Esimerkki vastauksesta: CTE on väliaikainen tulosjoukko, joka on määritelty yhden kyselyn suoritusalueen sisällä. Se on hyödyllinen monimutkaisten liitosten ja alikyselyiden yksinkertaistamisessa, luettavuuden parantamisessa ja rekursiivisten kyselyiden mahdollistamisessa. Edellisessä roolissani käytin CTE:itä usein jakaakseni monivaiheisen aggregointilogiikan helpommin ylläpidettäviksi komponenteiksi.


4) Miten suorituskyvyn säätö hoidetaan T-SQL-kyselyissä?

Ehdokkaalta odotetaan: Haastattelija haluaa arvioida kokemuksiasi kyselyiden optimoinnista ja suorituskyvyn vianmäärityksestä.

Esimerkki vastauksesta: Aloitan tutkimalla suoritussuunnitelmaa tunnistaakseni hitaat toiminnot, kuten taulukoiden skannaukset tai kalliit liitokset. Sitten tarkistan puuttuvat indeksit, tarpeettomat alikyselyt tai tehottomat liitokset. Analysoin myös tilastoja ja käytän indeksointistrategioita, kuten indeksien peittämistä tai suodatettuja indeksejä, suorituskyvyn parantamiseksi. Lopuksi tarkistan kyselylogiikan varmistaakseni, että se hyödyntää joukkopohjaisia ​​toimintoja rivi riviltä tapahtuvan käsittelyn sijaan.


5) Kuvaile tilannetta, jossa jouduit debugaamaan hitaasti toimivaa kyselyä tuotannossa. Mitä toimenpiteitä teit?

Ehdokkaalta odotetaan: Tämä käyttäytymiskysymys arvioi tosielämän ongelmanratkaisu- ja kommunikointitaitojasi.

Esimerkki vastauksesta: Edellisessä työtehtävässä raporttikyselyn suorittaminen kesti yli 20 minuuttia. Analysoin suoritussuunnitelmaa ja havaitsin, että yhdestä liitoksesta puuttui viiteavainsarakkeen indeksi. Indeksin luomisen ja tilastojen päivittämisen jälkeen kyselyn suoritusaika putosi alle 30 sekuntiin. Dokumentoin myös korjauksen ja jaoin sen tiimin kanssa vastaavien ongelmien estämiseksi tulevaisuudessa.


6) Mitä ovat väliaikaiset taulukot ja taulukkomuuttujat, ja miten ne eroavat toisistaan?

Ehdokkaalta odotetaan: Haastattelija testaa ymmärrystäsi T-SQL:n väliaikaisista tiedontallennusvaihtoehdoista.

Esimerkki vastauksesta: Väliaikaiset taulukot (#TempTable) luodaan tempdb-tietokantaan ja ne tukevat indeksejä, rajoituksia ja tilastoja. Taulukkomuuttujat (@TableVar) tallennetaan muistiin ja niillä on rajoitettu tilastotuki, joten ne sopivat pienemmille tietojoukoille. Väliaikaiset taulukot sopivat paremmin suurille tai monimutkaisille tietojoukoille, kun taas taulukkomuuttujat ovat tehokkaampia pienille, lyhytikäisille tiedoille.


7) Miten käsittelisit virheiden käsittelyä ja transaktioita T-SQL:ssä?

Ehdokkaalta odotetaan: Haastattelija tarkistaa, että ymmärrät transaktioiden eheyden ja poikkeusten käsittelyn.

Esimerkki vastauksesta: käytän BEGIN TRANSACTION, COMMITja ROLLBACK lausekkeet tietojen johdonmukaisuuden varmistamiseksi. Sisällytän myös TRY...CATCH lohkot virheiden sujuvaan käsittelyyn. Esimerkiksi:

BEGIN TRY
  BEGIN TRANSACTION
    -- SQL operations here
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
  PRINT ERROR_MESSAGE()
END CATCH

Tämä lähestymistapa estää osittaiset datapäivitykset virheiden sattuessa.


8) Miten ikkunafunktioita käytetään T-SQL:ssä, ja voitko antaa esimerkin?

Ehdokkaalta odotetaan: Haastattelija haluaa arvioida taitojasi vaativien analyyttisten kysymysten kanssa.

Esimerkki vastauksesta: Ikkunafunktiot mahdollistavat laskutoimitukset nykyiseen riviin liittyvien rivijoukkojen välillä ilman tietojen kutistamista. Esimerkiksi:

SELECT 
  EmployeeID, 
  Salary,
  RANK() OVER (ORDER BY Salary DESC) AS SalaryRank
FROM Employees;

Tämä määrittää työntekijöille ranking-numerot palkan perusteella, mikä helpottaa suorituskehityksen analysointia.


9) Kerro minulle monimutkaisesta T-SQL-projektista, jonka parissa työskentelit, ja miten lähestyit sen haasteita.

Ehdokkaalta odotetaan: Haastattelija etsii hakijoilta syvällistä kokemusta, ongelmanratkaisutaitoja ja tiimityöskentelytaitoja.

Esimerkki vastauksesta: Edellisessä roolissani rakensin tietovaraston ETL-prosessin käyttäen T-SQL:n tallennettuja proseduureja. Haasteena oli suurten tietomäärien tehokas käsittely. Optimoin kyselyitä osioiduilla taulukoilla, inkrementaalisilla kuormilla ja eräkäsittelyllä. Koordinoin myös BI-tiimin kanssa varmistaakseni yhdenmukaiset skeemasuunnitelmat ja parantaakseni raportointinopeutta yli 40 %.


10) Miten käsittelisit tilanteen, jossa kirjoittamasi tallennettu proseduuri aiheuttaa umpikujan tuotannossa?

Ehdokkaalta odotetaan: Haastattelija testaa kriisinhallintakykyäsi ja teknistä osaamistasi.

Esimerkki vastauksesta: Tunnistaisin lukkiutumisen ensin SQL Serverin avulla sys.dm_tran_locks ja lukkiutumiskaavioita. Sitten analysoisin resurssien käyttöjärjestyksen ja muokkasin menettelyä lukkojen hankkimiseksi johdonmukaisessa järjestyksessä. Edellisessä työssäni toteutin myös uudelleenyrityslogiikan kyseisille tapahtumille ja ajoitin säännöllisen valvonnan havaitakseni samankaltaisia ​​​​malleja varhaisessa vaiheessa.

Tiivistä tämä viesti seuraavasti: