Κορυφαίες 50 ερωτήσεις και απαντήσεις συνεντεύξεων T-SQL (2026)

Ερωτήσεις και απαντήσεις συνέντευξης T-SQL

Προετοιμάζεστε για μια συνέντευξη T-SQL; Ώρα να βελτιώσετε την κατανόησή σας για το πώς λειτουργούν πραγματικά οι βάσεις δεδομένων κάτω από την επιφάνεια. Με Ερωτήσεις συνέντευξης T-SQL, οι υπεύθυνοι προσλήψεων αξιολογούν όχι μόνο την ανάκληση σύνταξης αλλά και την ικανότητά σας στον χειρισμό δεδομένων, τη βελτιστοποίηση και τη λογική δομή.

Οι ευκαιρίες σε αυτόν τον τομέα συνεχίζουν να διευρύνονται, καθώς οι επιχειρήσεις εξαρτώνται από γνώσεις που βασίζονται σε δεδομένα. Οι υποψήφιοι με ισχυρή τεχνική εμπειρογνωμοσύνη, δεξιότητες ανάλυσης και ικανότητες επίλυσης προβλημάτων στον πραγματικό κόσμο ξεχωρίζουν - είτε πρόκειται για νέους φοιτητές είτε για επαγγελματίες με 5 έως 10 χρόνια εμπειρίας. Η κατανόηση ερωτήσεων και απαντήσεων τόσο σε βασικό όσο και σε προχωρημένο επίπεδο βοηθά τους ηγέτες ομάδων, τους διευθυντές και τους τεχνικούς ανώτερους να αναγνωρίσουν ισχυρές δεξιότητες SQL και εμπειρία σε επίπεδο root.

Ο οδηγός μας βασίζεται σε γνώσεις από περισσότερους από 65 υπεύθυνους προσλήψεων, 40+ ανώτερους προγραμματιστές και επαγγελματίες δεδομένων σε όλους τους κλάδους, εξασφαλίζοντας κάλυψη από τη βασική λογική SQL έως προηγμένες τεχνικές βελτιστοποίησης που εμπιστεύονται οι τεχνικοί ηγέτες παγκοσμίως.
Διαβάστε περισσότερα ...

👉 Δωρεάν Λήψη PDF: Ερωτήσεις και Απαντήσεις Συνέντευξης T-SQL

Κορυφαίες ερωτήσεις και απαντήσεις συνέντευξης T-SQL

1) Τι είναι η T-SQL και πώς διαφέρει από την τυπική SQL;

Η Transact-SQL (T-SQL) είναι Microsoftείναι η ιδιόκτητη επέκταση της γλώσσας SQL, που χρησιμοποιείται κυρίως με Microsoft SQL ServerΒελτιώνει την τυπική SQL εισάγοντας χαρακτηριστικά διαδικαστικού προγραμματισμού όπως μεταβλητές, συνθήκες, βρόχους, χειρισμό σφαλμάτων και ενσωματωμένες συναρτήσεις. Ενώ η τυπική SQL εστιάζει στον χειρισμό δεδομένων (SELECT, INSERT, UPDATE, DELETE), η T-SQL υποστηρίζει εντολές ελέγχου ροής (IF…ELSE, WHILE), χειρισμό συναλλαγών και συναρτήσεις συστήματος που επιτρέπουν στους προγραμματιστές να γράφουν σύνθετα σενάρια.

Άποψη SQL T-sql
Ιδιοκτησία Πρότυπο ANSI/ISO Microsoft
Διαδικαστική Λογική Περιωρισμένος Υποστηριζόμενα (μεταβλητές, βρόχοι)
Χειρισμός σφαλμάτων Ελάχιστο Υποστηρίζεται TRY…CATCH
Κύρια χρήση Γενικές βάσεις δεδομένων Ο SQL Server

Παράδειγμα:

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

2) Εξηγήστε τους διαφορετικούς τύπους συνδέσεων στην T-SQL με παραδείγματα.

Οι ενώσεις (joins) στην T-SQL συνδυάζουν γραμμές από δύο ή περισσότερους πίνακες με βάση σχετικές στήλες. Η κατανόηση των τύπων τους είναι κρίσιμη για τα ερωτήματα σχεσιακών δεδομένων.

Εγγραφή τύπου Περιγραφή Παράδειγμα σύνταξης
ΕΣΩΤΕΡΙΚΗ ΣΥΝΔΕΣΗ Επιστρέφει μόνο γραμμές που ταιριάζουν SELECT * FROM A INNER JOIN B ON A.id = B.id;
ΑΡΙΣΤΕΡΑ ΣΥΝΔΕΣΗ Όλα από αριστερά + αντιστοιχίες από δεξιά SELECT * FROM A LEFT JOIN B ON A.id = B.id;
ΔΕΞΙΑ ΣΥΝΔΕΣΗ Όλα από δεξιά + αντιστοιχίες από αριστερά SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
ΠΛΗΡΗΣ ΕΓΓΡΑΦΗ Συνδυάζει ΑΡΙΣΤΕΡΑ + ΔΕΞΙΑ SELECT * FROM A FULL JOIN B ON A.id = B.id;
ΕΓΓΡΑΦΕΙΤΕ ΣΤΑΥΡΟΣ καρτεσιανό προϊόν SELECT * FROM A CROSS JOIN B;

Πρακτικό παράδειγμα: Ενώνουμε Orders Customers για να βρείτε ποιοι πελάτες έχουν κάνει παραγγελίες χρησιμοποιώντας INNER JOIN.


3) Τι είναι οι Κοινές Παραστάσεις Πίνακα (CTE) και ποια είναι τα πλεονεκτήματά τους;

Μια Κοινή Έκφραση Πίνακα (CTE) παρέχει ένα προσωρινό σύνολο αποτελεσμάτων με όνομα που μπορεί να αναφερθεί μέσα σε ένα SELECT, INSERT, UPDATEΤο HIFU, ή Υψηλής Έντασης Εστιασμένος Υπέρηχος, στοχεύει επίσης στο πρόσωπο και τον λαιμό. Προσφέρει θεραπεία σε γρήγορες εκπομπές, γεγονός που κάνει τις συνεδρίες θεραπείας συντομότερες. DELETE πρόταση. Βελτιώνει την αναγνωσιμότητα και απλοποιεί τα αναδρομικά ερωτήματα.

Πλεονεκτήματα:

  • Βελτιώνει τη σαφήνεια και τη συντήρηση των ερωτημάτων.
  • Ενεργοποιεί την αναδρομή (για ιεραρχικά δεδομένα όπως οργανογράμματα).
  • Βοηθά στην αποφυγή επαναλαμβανόμενων υποερωτημάτων.
  • Αυξάνει την αρθρωσιμότητα σε μεγάλα σενάρια.

Παράδειγμα:

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

4) Πώς διαφέρουν οι προσωρινοί πίνακες και οι μεταβλητές πίνακα στην T-SQL;

Και τα δύο χρησιμοποιούνται για την αποθήκευση ενδιάμεσων αποτελεσμάτων, αλλά η συμπεριφορά και το πεδίο εφαρμογής τους διαφέρουν σημαντικά.

Χαρακτηριστικό Προσωρινός πίνακας (#Temp) Μεταβλητή πίνακα (@TableVar)
Αποθηκεύτηκε σε TempDB Μνήμη (με περιορισμένη χρήση TempDB)
Πεδίο Συναλλαγής Παρακολουθεί τις συναλλαγές Ανεξάρτητο από συναλλαγές
Δείκτες υποστηριζόνται! Περιωρισμένος
💪 Βελτίωση της απόδοσης στην άσκηση Καλύτερο για μεγάλα σύνολα δεδομένων Καλύτερο για μικρά σύνολα δεδομένων

Παράδειγμα:

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

Χρησιμοποιήστε προσωρινούς πίνακες όταν εργάζεστε με μεγάλα σύνολα δεδομένων ή όταν απαιτούνται ευρετήρια.


5) Εξηγήστε την έννοια των συναλλαγών στην T-SQL και τον κύκλο ζωής τους.

Μια συναλλαγή σε T-SQL διασφαλίζει ότι μια ακολουθία λειτουργιών εκτελείται ως μία ενιαία λογική μονάδα. Ο κύκλος ζωής περιλαμβάνει ΑΡΧΙΚΗ ΣΥΝΑΛΛΑΓΗ, ΔΙΑΠΡΑΤΤΩκαι ΕΠΑΝΑΦΟΡΑ.

Στάδιο Περιγραφή
ΑΡΧΙΚΗ ΣΥΝΑΛΛΑΓΗ Ξεκινά τη συναλλαγή
ΔΕΣΜΕΥΣΗ ΣΥΝΑΛΛΑΓΗΣ Αποθηκεύει όλες τις αλλαγές μόνιμα
ΣΥΝΑΛΛΑΓΗ ΑΝΑΚΥΡΩΣΗΣ Αναιρεί όλες τις λειτουργίες από την τελευταία BEGIN

Παράδειγμα:

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

Αν συμβεί κάποιο σφάλμα στη μέση, ROLLBACK διατηρεί την ακεραιότητα των δεδομένων.


6) Ποια είναι η διαφορά μεταξύ των εντολών DELETE, TRUNCATE και DROP;

εντολή Λειτουργία Επαναφορά Επηρεάζει τη δομή Ταχύτητα
ΔΙΑΓΡΑΦΗ Αφαιρεί συγκεκριμένες γραμμές Ναι Οχι Βραδύτερη
ΚΟΥΤΣΟΥΡΕΥΩ Αφαιρεί όλες τις γραμμές Όχι (συνήθως) Οχι Γρήγορα
DROP Διαγράφει ολόκληρο τον πίνακα Οχι Ναι γρηγορότερος

Παράδειγμα:

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

Χρήση DELETE για επιλεκτική αφαίρεση, TRUNCATE για εκκαθάριση, και DROP για να αφαιρέσετε εντελώς το τραπέζι.


7) Πώς λειτουργεί η διαχείριση σφαλμάτων στην T-SQL;

Η T-SQL παρέχει δομημένη διαχείριση σφαλμάτων μέσω του TRY...CATCH μπλοκ, επιτρέποντας στους προγραμματιστές να διαχειρίζονται με ομαλό τρόπο τα σφάλματα χρόνου εκτέλεσης.

Παράδειγμα:

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

Αυτή η προσέγγιση απομονώνει την ελαττωματική λειτουργία και εμποδίζει τη συναλλαγή να διαφθείρει την ακεραιότητα των δεδομένων. Οι προγραμματιστές μπορούν επίσης να έχουν πρόσβαση σε λειτουργίες του συστήματος όπως ERROR_NUMBER() or ERROR_SEVERITY() για διαγνωστικά.


8) Ποιοι είναι οι διαφορετικοί τρόποι βελτιστοποίησης της απόδοσης ερωτημάτων T-SQL;

Η βελτιστοποίηση περιλαμβάνει τη βελτιστοποίηση του σχεδιασμού, της ευρετηρίασης και των στρατηγικών εκτέλεσης SQL.

Βασικές τεχνικές:

  1. Χρήση σωστή ευρετηρίαση σε στήλες που υποβάλλονται συχνά ερωτήματα.
  2. Αποφύγετε SELECT * — καθορίστε ρητά στήλες.
  3. Χρήση λειτουργίες που βασίζονται σε σύνολα αντί για δρομείς.
  4. Αναλύστε σχέδια εκτέλεσης χρησιμοποιώντας το SQL Server Management Studio.
  5. Χρήση Συνδέεται αποτελεσματικά με τις κατάλληλες συνθήκες ενεργοποίησης.
  6. Μειώστε ένθετα υποερωτήματα; προτιμήστε CTE ή προσωρινούς πίνακες.

Η ρύθμιση της απόδοσης στο T-SQL περιλαμβάνει επίσης την παρακολούθηση στατιστικών στοιχείων εκτέλεσης ερωτημάτων χρησιμοποιώντας SET STATISTICS IO ON.


9) Τι είναι οι συναρτήσεις παραθύρου και πότε πρέπει να τις χρησιμοποιώ;

Οι συναρτήσεις παραθύρου εκτελούν υπολογισμούς σε ένα σύνολο γραμμών που σχετίζονται με την τρέχουσα γραμμή, χωρίς να τις συμπτύσσουν σε ένα μόνο αποτέλεσμα. Είναι χρήσιμες για την κατάταξη, την εκτέλεση συνόλων και τους κινητούς μέσους όρους.

Παράδειγμα:

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

Οι συνήθεις λειτουργίες περιλαμβάνουν RANK(), ROW_NUMBER(), DENSE_RANK()και SUM() OVER().

Αυτά είναι κρίσιμα για αναλυτικά φόρτα εργασίας όπου χρειάζεστε τόσο συγκεντρωτικά όσο και δεδομένα σε επίπεδο γραμμών.


10) Εξηγήστε τη διαφορά μεταξύ ευρετηρίων σε ομαδοποίηση και μη σε ομαδοποίηση.

Χαρακτηριστικό Clusterεκδ. Ευρετήριο Μη-Clusterεκδ. Ευρετήριο
Αποθήκευσης δεδομένων Αναδιατάσσει φυσικά τον πίνακα Ξεχωριστή δομή
Αριθμός ανά τραπέζι Ένας Πολλαπλούς
💪 Βελτίωση της απόδοσης στην άσκηση Ταχύτερα για ερωτήματα εύρους Ταχύτερα για συγκεκριμένες αναζητήσεις
Παράδειγμα χρήσης Πρωτεύων κλειδί Δευτερεύουσες αναζητήσεις

Παράδειγμα:

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

Η επιλογή του σωστού τύπου ευρετηρίου επηρεάζει άμεσα την ταχύτητα εκτέλεσης ερωτημάτων και την αποτελεσματικότητα αποθήκευσης.


11) Τι είναι οι αποθηκευμένες διαδικασίες στην T-SQL και γιατί χρησιμοποιούνται;

Μια αποθηκευμένη διαδικασία είναι μια προμεταγλωττισμένη συλλογή από μία ή περισσότερες προτάσεις SQL που είναι αποθηκευμένες στον διακομιστή. Βελτιώνουν την απόδοση, την ασφάλεια και την επαναχρησιμοποίηση, επιτρέποντάς σας να ενσωματώνετε λογική και να την εκτελείτε επανειλημμένα χωρίς επαναμεταγλώττιση. Οι αποθηκευμένες διαδικασίες μειώνουν την κίνηση δικτύου και υποστηρίζουν παραμέτρους για δυναμική εκτέλεση.

Παράδειγμα:

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

οφέλη:

  • Καλύτερη απόδοση λόγω προμεταγλώττισης.
  • Βελτιωμένη ασφάλεια μέσω ελεγχόμενης εκτέλεσης.
  • Ευκολότερη συντήρηση κώδικα και modularization.

12) Εξηγήστε τη διαφορά μεταξύ μιας αποθηκευμένης διαδικασίας και μιας συνάρτησης στην T-SQL.

Άποψη Αποθηκευμένη διαδικασία Λειτουργία
Τύπος επιστροφής Μπορεί να επιστρέψει πολλαπλές τιμές Πρέπει να επιστρέψει μία μόνο τιμή ή πίνακα
Χρήση σε SELECT Δεν επιτρέπεται Επιτρέπονται τα κατοικίδια
Χειρισμός σφαλμάτων Υποστηρίζεται TRY…CATCH Περιωρισμένος
Εκτέλεση Εκτελέστηκε μέσω EXEC Χρησιμοποιείται σε γραμμή με SQL
Έλεγχος συναλλαγών υποστηριζόνται! Δεν υποστηρίζεται

Παράδειγμα:

  • Διαδικασία: EXEC GetEmployeeDetails 'HR';
  • Λειτουργία: SELECT dbo.GetSalary(101);

Οι συναρτήσεις είναι ιδανικές για υπολογισμούς, ενώ οι διαδικασίες είναι καλύτερες για επιχειρηματική λογική και χειρισμό δεδομένων.


13) Τι είναι ένα trigger στην T-SQL και ποιοι είναι οι τύποι του;

Ένα trigger είναι μια ειδική αποθηκευμένη διαδικασία που εκτελείται αυτόματα σε απόκριση σε συγκεκριμένα συμβάντα (ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ) σε έναν πίνακα ή μια προβολή. Τα triggers χρησιμοποιούνται για την επιβολή επιχειρηματικών κανόνων, τον έλεγχο αλλαγών ή τη διατήρηση της ακεραιότητας των αναφορών.

Χαρακτηριστικά Περιγραφή
ΜΕΤΑ την ενεργοποίηση Φωτιές μετά την ολοκλήρωση της εκδήλωσης
ΑΝΤΙ ΣΚΑΝΔΙΣΤΗΣ Εκτελείται στη θέση του συμβάντος ενεργοποίησης

Παράδειγμα:

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

Αποφύγετε την υπερβολική χρήση εναυσμάτων — μπορούν να επηρεάσουν την απόδοση και να περιπλέξουν την αποσφαλμάτωση.


14) Πώς χειρίζεστε τιμές NULL στην T-SQL;

Το NULL αντιπροσωπεύει δεδομένα που λείπουν ή είναι άγνωστα. Η T-SQL παρέχει αρκετές συναρτήσεις για την αποτελεσματική διαχείρισή τους:

  • ISNULL(expression, replacement) → αντικαθιστά την τιμή NULL με μια προεπιλεγμένη τιμή.
  • COALESCE(expression1, expression2, ...) → επιστρέφει την πρώτη μη-NULL τιμή.
  • NULLIF(expression1, expression2) → επιστρέφει NULL αν οι εκφράσεις είναι ίσες.

Παράδειγμα:

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

Πρακτική καλύτερης ποιότητας: Να λαμβάνετε πάντα υπόψη τις τιμές NULL στις ενώσεις και τις συνθήκες για να αποφύγετε μη αναμενόμενα αποτελέσματα.


15) Τι είναι οι δρομείς στην T-SQL και πότε πρέπει να αποφεύγονται;

Ένας κέρσορας επιτρέπει την επεξεργασία των αποτελεσμάτων ερωτήματος ανά γραμμή — χρήσιμο για σύνθετη λογική όπου οι λειτουργίες που βασίζονται σε σύνολα είναι ανεπαρκείς. Ωστόσο, οι κέρσορες είναι επιβραδύνουν βαρύς πόρος σε σύγκριση με εναλλακτικές λύσεις που βασίζονται σε σύνολα.

Παράδειγμα:

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

Μειονεκτήματα:

  • Αυξημένη χρήση μνήμης.
  • Κακή επεκτασιμότητα.
  • Μειωμένη απόδοση.

Εναλλακτική λύση: Χρησιμοποιήστε συνδέσμους πίνακα, δευτερεύοντα ερωτήματα ή συναρτήσεις παραθύρου όποτε είναι δυνατόν.


16) Εξηγήστε την πρόταση MERGE και τις περιπτώσεις χρήσης της.

The MERGE η δήλωση εκτελεί ΕΝΘΕΤΟ, ΕΚΣΥΓΧΡΟΝΊΖΩκαι ΔΙΑΓΡΑΦΗ λειτουργίες σε μία μόνο εντολή — ιδανικό για τον συγχρονισμό δύο πινάκων.

Παράδειγμα σύνταξης:

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;

Χρήση περιπτώσεων:

  • Αποθήκευση δεδομένων (συγχρονισμός σταδιοποίησης και πινάκων προορισμού).
  • Σταδιακή φόρτωση δεδομένων.
  • Διατήρηση πινάκων ελέγχου ή διαστάσεων.

17) Ποιοι είναι οι διαφορετικοί τύποι συναρτήσεων που ορίζονται από τον χρήστη (UDF) στην T-SQL;

Χαρακτηριστικά Περιγραφή Παράδειγμα
Βαθμωτό μέγεθος Επιστρέφει μία μόνο τιμή CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
Ενσωματωμένες τιμές πίνακα Επιστρέφει έναν πίνακα μέσω single SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
Πίνακας πολλαπλών δηλώσεων με τιμές Επιστρέφει έναν πίνακα μετά από πολλαπλές εντολές Χρήσιμο για σύνθετη λογική

Οι συναρτήσεις προωθούν την επαναχρησιμοποίηση κώδικα και βελτιώνουν τον σχεδιασμό αρθρωτών ερωτημάτων.

Θα πρέπει να είναι ντετερμινιστικά (να επιστρέφουν το ίδιο αποτέλεσμα για την ίδια είσοδο) όποτε είναι δυνατόν για βελτιστοποίηση της απόδοσης.


18) Τι είναι η κανονικοποίηση και ποια είναι τα πλεονεκτήματα και τα μειονεκτήματά της;

Η κανονικοποίηση είναι η διαδικασία οργάνωσης δεδομένων σε μια βάση δεδομένων για την ελαχιστοποίηση του πλεονασμού και τη βελτίωση της ακεραιότητας. Περιλαμβάνει τη διαίρεση πινάκων σε μικρότερες, σχετικές οντότητες.

Κανονική φόρμα Κανόνας Παράδειγμα
1NF Εξαλείψτε τις επαναλαμβανόμενες ομάδες Διαχωρίστε δεδομένα διαχωρισμένα με κόμμα
2NF Κατάργηση μερικών εξαρτήσεων Διασφάλιση πλήρους εξάρτησης από το πρωτεύον κλειδί
3NF Κατάργηση μεταβατικών εξαρτήσεων Μετακίνηση παραγόμενων χαρακτηριστικών

Πλεονεκτήματα:

  • Μειώνει τον πλεονασμό.
  • Εξασφαλίζει τη συνέπεια των δεδομένων.
  • Απλοποιεί τη συντήρηση.

Μειονεκτήματα:

  • Σύνθετες ενώσεις.
  • Πιθανοί συμβιβασμοί απόδοσης για αναλυτικά ερωτήματα.

19) Ποιοι είναι οι διαφορετικοί τύποι περιορισμών στην T-SQL;

Οι περιορισμοί επιβάλλουν κανόνες σχετικά με την ακεραιότητα των δεδομένων μέσα σε έναν πίνακα.

Περιορισμός Σκοπός Παράδειγμα
Κύριο κλειδί Προσδιορίζει μοναδικά κάθε γραμμή PRIMARY KEY (EmpID)
ΞΕΝΟ ΚΛΕΙΔΙ Συνδέει δύο πίνακες FOREIGN KEY (DeptID)
ΜΟΝΑΔΙΚΌΣ Εξασφαλίζει μοναδικές τιμές στηλών UNIQUE (Email)
ΈΛΕΓΧΟΣ Επικυρώνει το εύρος δεδομένων CHECK (Age >= 18)
DEFAULT Παρέχει προεπιλεγμένες τιμές DEFAULT GETDATE()

Οι περιορισμοί διασφαλίζουν την ακρίβεια και την αξιοπιστία, μειώνοντας την ανάγκη για εκτεταμένη επικύρωση σε επίπεδο εφαρμογής.


20) Πώς διαχειρίζεστε τα δικαιώματα και την ασφάλεια στην T-SQL;

Η T-SQL διαχειρίζεται την ασφάλεια της βάσης δεδομένων μέσω συνδέσεις, χρήστες, ρόλοι και δικαιώματα.

Τα δικαιώματα μπορούν να χορηγηθούν ή να ανακληθούν σε επίπεδο αντικειμένου ή σχήματος.

Παράδειγμα:

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

Καλυτερα Πρακτικές:

  • Χρήση ρόλους αντί για άμεσα δικαιώματα χρήστη.
  • Αποφύγετε τη χρήση sa ή λογαριασμοί συστήματος για εφαρμογές.
  • Ελέγχετε τακτικά τα δικαιώματα με sys.database_permissions.

Η σωστή διαχείριση δικαιωμάτων διασφαλίζει την αρχή των ελαχίστων προνομίων και τη συμμόρφωση με τις πολιτικές ασφαλείας.


21) Ποια είναι τα διαφορετικά επίπεδα απομόνωσης συναλλαγών στην T-SQL;

Τα επίπεδα απομόνωσης συναλλαγών καθορίζουν τον τρόπο με τον οποίο μια συναλλαγή απομονώνεται από τις άλλες — εξισορρόπηση συνοχή μαζί σου, συνοχήΟ SQL Server υποστηρίζει τα εξής:

Επίπεδο απομόνωσης Περιγραφή Βρώμικη Ανάγνωση Μη επαναλήψιμη ανάγνωση Φανταστική ανάγνωση
ΔΙΑΒΑΣΤΕ ΑΝΗΜΕΡΩΜΕΝΗ Διαβάζει μη δεσμευμένα δεδομένα Ναι Ναι Ναι
ΔΙΑΒΑΣΤΕ ΑΝΑΓΝΩΡΙΣΜΕΝΗ Προεπιλογή. Τα κλειδώματα αποτρέπουν τις ανεπιθύμητες αναγνώσεις Οχι Ναι Ναι
ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΒΑΣΜΑ Αποτρέπει την αλλαγή δεδομένων μέχρι την ολοκλήρωση Οχι Οχι Ναι
ΣΕΙΡΑΙΩΣΙΜΟ Πλήρης απομόνωση; υψηλότερο κλείδωμα Οχι Οχι Οχι
ΣΤΙΓΜΙΟΤΥΠΟ Χρησιμοποιεί διαχείριση εκδόσεων, όχι κλείδωμα Οχι Οχι Οχι

Παράδειγμα:

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

Χρήση ΣΤΙΓΜΙΟΤΥΠΟ για συστήματα υψηλής ταυτόχρονης λειτουργίας, ώστε να ελαχιστοποιείται ο αποκλεισμός χωρίς να θυσιάζεται η συνέπεια.


22) Τι είναι ένα αδιέξοδο στον SQL Server και πώς μπορείτε να το αποτρέψετε;

A αδιέξοδο συμβαίνει όταν δύο συναλλαγές διατηρούν κλειδώματα που χρειάζεται η μία η άλλη, με αποτέλεσμα μια απόκλιση. Ο SQL Server εντοπίζει και τερματίζει αυτόματα μία συναλλαγή ως θύμα του αδιεξόδου.

Παράδειγμα σεναρίου:

  • Η Συναλλαγή Α κλειδώνει τον Πίνακα 1 και στη συνέχεια περιμένει τον Πίνακα 2.
  • Η συναλλαγή Β κλειδώνει τον Πίνακα 2 και στη συνέχεια περιμένει τον Πίνακα 1.

Τεχνικές πρόληψης:

  1. Αποκτήστε πρόσβαση στους πόρους με την ίδια σειρά.
  2. Διατηρήστε σύντομες συναλλαγές.
  3. Χρησιμοποιήστε τα κατάλληλα επίπεδα μόνωσης.
  4. Αποφύγετε την αλληλεπίδραση του χρήστη εντός των συναλλαγών.

Χρησιμοποιήστε το SQL Profiler ή το Extended Events για να εντοπίσετε αδιέξοδα σε πραγματικό χρόνο.


23) Εξηγήστε τη διαφορά μεταξύ απαισιόδοξου και αισιόδοξου ελέγχου ταυτόχρονης λειτουργίας.

Χαρακτηριστικά Περιγραφή Μηχανισμός κλειδώματος Χρήση θήκης
Δυσοίωνος Κλειδώνει τα δεδομένα κατά τη διάρκεια της συναλλαγής Βαρύ κλείδωμα Περιβάλλοντα υψηλής σύγκρουσης
Αισιόδοξος Χρησιμοποιεί διαχείριση εκδόσεων γραμμών, ελέγχει πριν από την υποβολή Ελάχιστο κλείδωμα Φόρτοι εργασίας με μεγάλο όγκο ανάγνωσης και χαμηλές συγκρούσεις

Παράδειγμα:

  • Απαισιόδοξος: Προεπιλογή READ COMMITTED κλείδωμα.
  • Αισιόδοξος: SNAPSHOT απομόνωση με δημιουργία εκδόσεων γραμμών.

Η αισιόδοξη ταυτόχρονη λειτουργία βελτιώνει την απόδοση για συστήματα με μεγάλες λειτουργίες ανάγνωσης και σπάνιες ενημερώσεις.


24) Πώς μπορείτε να αναλύσετε και να βελτιστοποιήσετε ένα ερώτημα T-SQL που εκτελείται αργά;

  1. Ελέγξτε το σχέδιο εκτέλεσης: Εντοπίστε σαρώσεις, ελλείποντα ευρετήρια και δαπανηρές λειτουργίες.
  2. Χρήση ΡΥΘΜΙΣΗ ΣΤΑΤΙΣΤΙΚΩΝ IO/TIME: Ανάλυση χρήσης εισόδων/εξόδων και CPU.
  3. Αποφύγετε τους κέρσορες και τους βρόχους: Αντικατάσταση με λειτουργίες που βασίζονται σε σύνολα.
  4. Βελτιστοποίηση ευρετηρίου: Προσθήκη ή αναδιοργάνωση κατακερματισμένων ευρετηρίων.
  5. Ανίχνευση παραμέτρων: Χρήση OPTION (RECOMPILE) για να δημιουργήσουν νέα σχέδια.

Παράδειγμα:

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

Παρακολουθώντας τακτικά τα αργά ερωτήματα με Δυναμικές Προβολές Διαχείρισης (DMV) όπως το λευκό και το γκρι είναι μια ασφαλής επιλογή. Ταιριάζουν σχεδόν με οποιοδήποτε χρώμα ξύλου και δημιουργούν μια ισορροπημένη εμφάνιση. Για μια μοντέρνα αίσθηση, ίσως προτιμήσετε sys.dm_exec_query_stats είναι μια βέλτιστη πρακτική.


25) Τι είναι η Δυναμική SQL και ποια είναι τα πλεονεκτήματα και οι κίνδυνοι της;

Η δυναμική SQL σάς επιτρέπει να κατασκευάζετε δυναμικά εντολές SQL κατά τον χρόνο εκτέλεσης χρησιμοποιώντας μεταβλητές.

Παράδειγμα:

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

Πλεονεκτήματα:

  • Ευελιξία για ονόματα ή φίλτρα μεταβλητών πινάκων.
  • Επαναχρησιμοποιήσιμο για πολλαπλά σχήματα.

Μειονεκτήματα:

  • Ευάλωτο σε SQL Injection αν δεν έχει παραμετροποιηθεί.
  • Πιο δύσκολο να εντοπιστεί σφάλμα και να συντηρηθεί.

Πάντα να χρησιμοποιείτε sp_executesql με παραμέτρους ασφαλείας.


26) Τι είναι τα προσωρινά αντικείμενα στην T-SQL και πώς διαφέρουν;

Τα προσωρινά αντικείμενα αποθηκεύονται σε TempDB και βοηθούν στη διαχείριση ενδιάμεσων δεδομένων.

Τύπος αντικειμένου Scope Παράδειγμα
Τοπικός Πίνακας Θερμοκρασίας Ειδικό για την περίοδο λειτουργίας CREATE TABLE #TempTable
Πίνακας καθολικών θερµοκρασιών Ορατό σε όλες τις συνεδρίες CREATE TABLE ##TempGlobal
Μεταβλητή πίνακα Ειδικό για παρτίδες DECLARE @Temp TABLE (...)

Καλυτερα Πρακτικές:

  • Προτιμήστε μεταβλητές πίνακα για μικρότερα σύνολα δεδομένων.
  • Χρησιμοποιήστε τοπικούς προσωρινούς πίνακες για μεγαλύτερα δεδομένα με ανάγκες δημιουργίας ευρετηρίου.
  • Αποθέστε ρητά τους προσωρινούς πίνακες για να απελευθερώσετε πόρους πιο γρήγορα.

27) Πώς χρησιμοποιείτε συναρτήσεις διαμέρισης παραθύρων στην T-SQL;

Η διαμέριση επιτρέπει την εφαρμογή συναρτήσεων παραθύρου σε συγκεκριμένα υποσύνολα δεδομένων.

Παράδειγμα:

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

οφέλη:

  • Υπολογίζει αποτελεσματικά τις κατατάξεις, τα σύνολα και τους μέσους όρους ανά ομάδα.
  • Εξαλείφει την ανάγκη για αυτο-ενώσεις ή υποερωτήματα.

Χρήση περιπτώσεων: Ζώνες μισθών, κατατάξεις πωλήσεων και αναλυτικά στοιχεία τάσεων.


28) Ποια είναι η διαφορά μεταξύ UNION και UNION ALL στην T-SQL;

Ρήτρα Διπλότυπα 💪 Βελτίωση της απόδοσης στην άσκηση Χρήση θήκης
ΕΝΩΣΗ Αφαιρεί τα διπλότυπα Πιο αργό (χρησιμοποιεί ταξινόμηση/διακριτή διαφοροποίηση) Συνδυάζοντας καθαρά τα σύνολα αποτελεσμάτων
UNION ALL Διατηρεί διπλότυπα Ταχύτερη Συγκέντρωση ή μετεγκατάσταση δεδομένων

Παράδειγμα:

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

Προτιμώ UNION ALL όταν τα διπλότυπα είναι αποδεκτά και η απόδοση έχει σημασία.


29) Πώς εργάζεστε με δεδομένα JSON σε T-SQL;

Ο SQL Server υποστηρίζει εγγενείς συναρτήσεις JSON για την ανάλυση και τη δημιουργία δεδομένων JSON.

Παράδειγμα:

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

Λειτουργίες πλήκτρων:

  • JSON_VALUE() → Εξάγει βαθμωτές τιμές.
  • JSON_QUERY() → Εξάγει αντικείμενα/πίνακες.
  • OPENJSON() → Αναλύει το JSON σε γραμμές.
  • FOR JSON → Μετατρέπει τα αποτελέσματα ερωτήματος σε μορφή JSON.

Χρήσιμο για API, υβριδικά συστήματα και ενσωματώσεις NoSQL.


30) Πώς μπορείτε να διαχειριστείτε και να βελτιστοποιήσετε το TempDB στον SQL Server;

TempDB είναι μια βάση δεδομένων συστήματος κρίσιμη για προσωρινή αποθήκευση και διαχείριση εκδόσεων. Η κακή διαχείριση μπορεί να προκαλέσει σοβαρά προβλήματα απόδοσης.

Τεχνικές βελτιστοποίησης:

  1. Τοποθετήστε το TempDB σε γρήγορη αποθήκευση (SSD)
  2. Προ-μεγέθυνση δεδομένων και αρχείων καταγραφής.
  3. Χρησιμοποιήστε πολλά αρχεία δεδομένων (1 ανά πυρήνα CPU έως 8).
  4. Παρακολούθηση με sys.dm_db_file_space_usage.
  5. Καθαρίζετε τακτικά τα προσωρινά αντικείμενα.

Παράδειγμα ερωτήματος:

SELECT * FROM sys.dm_db_file_space_usage;

Η προληπτική διαχείριση του TempDB αποφεύγει τις διαφωνίες στις σελίδες κατανομής και βελτιώνει τη συνολική απόδοση της βάσης δεδομένων.


31) Τι είναι οι υποδείξεις ερωτημάτων στην T-SQL και πότε πρέπει να χρησιμοποιούνται;

Οι υποδείξεις ερωτήματος δίνουν εντολή στο εργαλείο βελτιστοποίησης SQL Server να τροποποιήσει το κανονικό σχέδιο εκτέλεσης.

Θα πρέπει να χρησιμοποιούνται με φειδώ — μόνο όταν κατανοείτε πλήρως το πλαίσιο κατανομής και εκτέλεσης δεδομένων.

Παράδειγμα:

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

Συνήθεις συμβουλές:

  • NOLOCK: Διαβάζει χωρίς κλειδώματα (μπορεί να διαβάσει μη δεσμευμένα δεδομένα).
  • FORCESEEK: Επιβάλλει αναζήτηση σε ευρετήριο αντί για σάρωση.
  • OPTIMIZE FOR: Καθοδηγεί τις τιμές των παραμέτρων για τη δημιουργία σχεδίου.
  • RECOMPILE: Επιβάλλει την επαναμεταγλώττιση για κάθε εκτέλεση.

Προσοχή: Η υπερβολική χρήση υποδείξεων μπορεί να υποβαθμίσει την απόδοση καθώς τα δεδομένα αυξάνονται ή τα μοτίβα αλλάζουν. Χρησιμοποιήστε τα μόνο όταν το σχέδιο του βελτιστοποιητή είναι αποδεδειγμένα αναποτελεσματικό.


32) Εξηγήστε την έννοια της προσωρινής αποθήκευσης σχεδίου εκτέλεσης στον SQL Server.

Ο SQL Server αποθηκεύει προσωρινά σχέδια εκτέλεσης για να αποφύγει την επαναμεταγλώττιση για επαναλαμβανόμενα ερωτήματα.

Όταν το ίδιο ερώτημα εκτελείται ξανά με την ίδια δομή, επαναχρησιμοποιεί το προσωρινά αποθηκευμένο σχέδιο, βελτιώνοντας την απόδοση.

Παράδειγμα:

EXEC GetCustomerOrders @CustomerID = 101;

οφέλη:

  • Μειώνει την επιβάρυνση της CPU.
  • Βελτιώνει τη συνέπεια στον χρόνο απόκρισης.

Προβλήματα:

  • Ανίχνευση παραμέτρων μπορεί να προκαλέσει αναποτελεσματικά σχέδια.
  • Η υπερφόρτωση της προσωρινής μνήμης του σχεδίου ενδέχεται να καταναλώσει μνήμη.

Μείωση: Χρήση OPTION (RECOMPILE) or OPTIMIZE FOR UNKNOWN όπου οι παράμετροι ποικίλλουν σημαντικά.


33) Τι είναι η ανίχνευση παραμέτρων και πώς μπορεί να επηρεάσει την απόδοση;

Η ανίχνευση παραμέτρων συμβαίνει όταν ο SQL Server χρησιμοποιεί τιμές παραμέτρων από την πρώτη εκτέλεση ενός ερωτήματος για να δημιουργήσει ένα σχέδιο που στη συνέχεια επαναχρησιμοποιείται — ακόμα κι αν δεν είναι βέλτιστο για μεταγενέστερες εκτελέσεις.

Παράδειγμα σεναρίου:

  • Πρώτη εκτέλεση: μικρό σύνολο δεδομένων → σχέδιο αναζήτησης ευρετηρίου.
  • Επόμενη εκτέλεση: μεγάλο σύνολο δεδομένων → επαναχρησιμοποίηση του ίδιου σχεδίου, αλλά αργή.

Λύσεις:

  1. Χρήση OPTION (RECOMPILE) για να δημιουργήσουν νέα σχέδια.
  2. Χρησιμοποιήστε τοπικές μεταβλητές για να καλύψετε τις τιμές των παραμέτρων.
  3. Χρήση OPTIMIZE FOR or OPTIMIZE FOR UNKNOWN.

Η ανίχνευση παραμέτρων είναι ένας από τους κορυφαίους πραγματικούς παράγοντες απρόβλεπτης απόδοσης στην T-SQL.


34) Πώς παρακολουθείτε και αναλύετε την απόδοση των ερωτημάτων στον SQL Server;

Μπορείτε να χρησιμοποιήσετε διάφορα εργαλεία και DMV για να δημιουργήσετε προφίλ και να ρυθμίσετε την απόδοση:

  • Σχέδια εκτέλεσης: Ctrl + M σε SSMS ή sys.dm_exec_query_plan.
  • Οδικά Αυτοκίνητα (DMV):

    • sys.dm_exec_query_stats – CPU και διάρκεια.
    • sys.dm_exec_sql_text – Κείμενο SQL.
    • sys.dm_exec_requests – Ενεργά ερωτήματα.
  • Παρακολούθηση απόδοσης και εκτεταμένα συμβάντα για μακροπρόθεσμη παρακολούθηση.

Παράδειγμα:

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) Εξηγήστε τον ρόλο των στατιστικών στη βελτιστοποίηση ερωτημάτων.

Τα στατιστικά στοιχεία περιγράφουν την κατανομή δεδομένων (π.χ., διακριτές τιμές, πυκνότητα, ιστόγραμμα) που χρησιμοποιεί ο βελτιστοποιητής για την εκτίμηση της πληθικότητας.

Εάν τα στατιστικά στοιχεία είναι ξεπερασμένα, ο SQL Server ενδέχεται να επιλέξει κακά σχέδια.

Πλήκτρες εντολές:

  • UPDATE STATISTICS Employees;
  • sp_updatestats;
  • Ρύθμιση αυτόματης ενημέρωσης: ενεργοποιημένη από προεπιλογή.

Καλυτερα Πρακτικές:

  • Διατήρηση AUTO_UPDATE_STATISTICS ενεργοποιημένη.
  • Για μεγάλους πίνακες, προγραμματίστε μη αυτόματες ενημερώσεις.
  • Χρήση FULLSCAN για κρίσιμους δείκτες.

Τα ξεπερασμένα στατιστικά στοιχεία αποτελούν σιωπηλό δολοφόνο της απόδοσης.


36) Ποια είναι η διαφορά μεταξύ μιας αναζήτησης ευρετηρίου και μιας σάρωσης ευρετηρίου;

Operaσμού Περιγραφή 💪 Βελτίωση της απόδοσης στην άσκηση Χρήση θήκης
Αναζήτηση ευρετηρίου Μεταβαίνει απευθείας σε αντίστοιχες γραμμές Γρήγορα Εξαιρετικά επιλεκτικά ερωτήματα
Σάρωση ευρετηρίου Διαβάζει όλες τις καταχωρήσεις ευρετηρίου διαδοχικά Βραδύτερη Ερωτήματα χαμηλής επιλεκτικότητας

Παράδειγμα:

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

Συμβουλή βελτιστοποίησης: Δημιουργήστε φιλτραρισμένα ή καλύπτοντα ευρετήρια για να μετατρέψετε τις σαρώσεις σε αναζητήσεις.


37) Εξηγήστε τους διαμερισμένους πίνακες και τα πλεονεκτήματά τους.

Η διαμέριση διαιρεί έναν μεγάλο πίνακα σε μικρότερα, διαχειρίσιμα κομμάτια (διαμερίσματα), συχνά με βάση μια στήλη εύρους (όπως ημερομηνία).

οφέλη:

  • Ταχύτερη διαχείριση δεδομένων (φόρτωση/αφαίρεση δεδομένων ανά διαμέρισμα).
  • Βελτιωμένη απόδοση ερωτημάτων σε μεγάλα σύνολα δεδομένων.
  • Παράλληλη επεξεργασία για διαμερισμένες σαρώσεις.

Παράδειγμα:

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

Περίπτωση χρήσης: Αποθήκες δεδομένων που χειρίζονται δισεκατομμύρια γραμμές όπου τα παλιά διαμερίσματα μπορούν να αρχειοθετηθούν αποτελεσματικά.


38) Τι είναι οι αναδρομικές CTE και ποιοι περιορισμοί έχουν;

A αναδρομική έκφραση κοινού πίνακα (CTE) αναφέρεται στον εαυτό του, συνήθως για ιεραρχικά δεδομένα όπως οργανογράμματα ή δενδρικές δομές.

Παράδειγμα:

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;

Περιορισμοί:

  • Προεπιλεγμένο όριο αναδρομής = επίπεδα 100.
  • Μπορεί να προκαλέσει προβλήματα απόδοσης εάν το βάθος αναδρομής είναι υψηλό.
  • Χρήση OPTION (MAXRECURSION n) για να ρυθμίσετε το όριο.

39) Πώς χειρίζεται ο SQL Server εσωτερικά σφάλματα στις συναλλαγές;

Όταν παρουσιάζεται σφάλμα σε μια συναλλαγή:

  • Αν αυτό είναι σοβαρό (επίπεδο > 20), η σύνδεση τερματίζεται αμέσως.
  • If μη σοβαρό, μπορεί να πιαστεί με TRY...CATCH.

Παράδειγμα:

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;

καλύτερη πρακτική: Πάντα να τυλίγετε το DML σε TRY…CATCH για ανθεκτικότητα σε σφάλματα.


40) Ποιες είναι μερικές προηγμένες τεχνικές ρύθμισης απόδοσης T-SQL;

  1. Αποφύγετε τα βαθμωτά UDF στο SELECT — οι ενσωματωμένες συναρτήσεις είναι πιο γρήγορες.
  2. Χρήση φιλτραρισμένων ευρετηρίων για να μειώσετε το μέγεθος του δείκτη.
  3. Αξιοποιήστε το OLTP στη μνήμη (Hekaton) για συστήματα υψηλής ταυτόχρονης λειτουργίας.
  4. Εκτέλεση σε λειτουργία παρτίδας σε ευρετήρια columnstore για αναλυτικά στοιχεία.
  5. Εξαλείψτε τις έμμεσες μετατροπές αντιστοιχίζοντας τύπους δεδομένων.
  6. Χρήση χώρου αποθήκευσης ερωτημάτων για να συγκρίνετε ιστορικά σχέδια.

Παράδειγμα για την ανίχνευση έμμεσων μετατροπών:

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

Η βελτίωση της απόδοσης είναι μια συνεχής διαδικασία — όχι ένα εφάπαξ γεγονός.


41) Πώς θα εντοπίζατε τα ερωτήματα που απαιτούν περισσότερο πόρους στον SQL Server;

Μπορείτε να εντοπίσετε ερωτήματα υψηλού κόστους χρησιμοποιώντας Προβολές Δυναμικής Διαχείρισης (DMV) που καταγράφουν στατιστικά στοιχεία ιστορικού εκτέλεσης.

Παράδειγμα:

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;

Βασικές μετρήσεις:

  • AvgCPU: Μέσος χρόνος CPU ανά εκτέλεση.
  • AvgReads: Ένταση εισόδου/εξόδου.
  • AvgDuration: Λανθάνουσα κατάσταση εκτέλεσης.

Αυτή η προσέγγιση βοηθά τους βασικούς διαχειριστές βάσεων δεδομένων (DBA) να απομονώνουν τα βαριά ερωτήματα προτού καν οι χρήστες παρατηρήσουν υποβάθμιση της απόδοσης.


42) Πώς μπορείτε να εντοπίσετε και να διορθώσετε ελλείποντα ευρετήρια στον SQL Server;

Ο SQL Server παρακολουθεί αυτόματα τις προτάσεις ευρετηρίου που λείπουν μέσω DMV.

Παράδειγμα:

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;

Καλυτερα Πρακτικές:

  • Δώστε προτεραιότητα σε ευρετήρια υψηλής αναζήτησης πρώτα.
  • Επαλήθευση μέσω σχεδίων εκτέλεσης πριν από τη δημιουργία.
  • Αποφύγετε την υπερβολική δημιουργία ευρετηρίου — επιβραδύνει τις εγγραφές.

43) Ποια είναι η διαφορά μεταξύ κατοπτρισμού βάσης δεδομένων, αναπαραγωγής και αποστολής αρχείων καταγραφής;

Χαρακτηριστικό Σκοπός Σε πραγματικό χρόνο failover Περίπλοκο
Mirroring Αντίγραφο βάσης δεδομένων υψηλής διαθεσιμότητας Ναι Αυτόματο Μέτριας Δυσκολίας
Αντιγραφή Κατανομή δεδομένων σε βάσεις δεδομένων Μερική Χειροκίνητο Ψηλά
Αποστολή αρχείου καταγραφής Στρατηγική DR βασισμένη σε αντίγραφα ασφαλείας Οχι Χειροκίνητο Χαμηλός

Οδηγίες Χρήσης:

  • Κατοπτρισμός → Συστήματα υψηλής διαθεσιμότητας OLTP.
  • Αντιγραφή → Κατανεμημένη αναφορά.
  • Αποστολή αρχείων καταγραφής → Ρυθμίσεις αποκατάστασης από καταστροφή.

44) Πώς αντιμετωπίζετε προβλήματα αποκλεισμού στον SQL Server;

Το μπλοκάρισμα συμβαίνει όταν μια διεργασία διατηρεί κλειδώματα που χρειάζεται μια άλλη διεργασία.

Για να εντοπίσετε τους αναστολείς:

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;

Λύσεις:

  • Μειώστε τη διάρκεια της συναλλαγής.
  • Χρησιμοποιήστε απομόνωση στιγμιότυπου.
  • Ρυθμίστε τα ερωτήματα για να ελαχιστοποιήσετε το κλείδωμα.
  • Προσδιορίστε μακροχρόνιες ανοιχτές συναλλαγές με DBCC OPENTRAN.

45) Πώς βοηθάει το Query Store του SQL Server στη βελτίωση της απόδοσης;

Το Query Store καταγράφει κείμενο ερωτήματος, σχέδια και στατιστικά στοιχεία χρόνου εκτέλεσης — ενεργοποιώντας ανάλυση παλινδρόμησης σχεδίου.

Βοηθά στον εντοπισμό πότε ένα ερώτημα γίνεται ξαφνικά αργό λόγω αλλαγών στο σχέδιο.

Παράδειγμα:

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;

οφέλη:

  • Συγκρίνετε ιστορικά σχέδια.
  • Επιβάλετε καλά σχέδια.
  • Παρακολουθήστε τις τάσεις απόδοσης με την πάροδο του χρόνου.

46) Πώς μπορείτε να αποτρέψετε την εισαγωγή SQL σε εφαρμογές T-SQL;

Πρωτεύουσες άμυνες:

  1. Χρήση παραμετροποιημένα ερωτήματα μέσω sp_executesql.
  2. Επικύρωση και απολύμανση όλων των εισροών χρήστη.
  3. Αποφύγετε τη δυναμική συνένωση SQL.
  4. Χρησιμοποιώ αρχή του ελάχιστου προνομίου για λογαριασμούς βάσης δεδομένων.

Ασφαλές παράδειγμα:

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

Παρόλο που η SQL injection είναι σε επίπεδο εφαρμογής, Οι DBA πρέπει να ελέγχουν τις αποθηκευμένες διαδικασίες και τα αρχεία καταγραφής για μη παραμετροποιημένη εκτέλεση.


47) Πώς χρησιμοποιείτε τα Εκτεταμένα Συμβάντα για εις βάθος παρακολούθηση της απόδοσης;

Το Extended Events (XEvents) είναι ένα ελαφρύ πλαίσιο παρακολούθησης απόδοσης — μια σύγχρονη εναλλακτική λύση στο SQL Trace.

Παράδειγμα:

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;

Χρήση περιπτώσεων:

  • Παρακολούθηση ερωτημάτων με υψηλή χρήση CPU.
  • Καταγραφή αδιεξόδων ή ελλειπουσών ευρετηρίων.
  • Δημιουργήστε προφίλ για μακροχρόνιες δηλώσεις σε παραγωγή με ελάχιστη επιβάρυνση.

48) Τι είναι τα φιλτραρισμένα ευρετήρια και πότε πρέπει να χρησιμοποιούνται;

Ένα φιλτραρισμένο ευρετήριο καταχωρεί μόνο ένα υποσύνολο γραμμών που ικανοποιούν μια συνθήκη φίλτρου — βελτιώνοντας την απόδοση και μειώνοντας τον χώρο αποθήκευσης.

Παράδειγμα:

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

οφέλη:

  • Μικρότερο μέγεθος δείκτη.
  • Ταχύτερη συντήρηση.
  • Βελτιστοποιημένο για επιλεκτικά ερωτήματα.

καλύτερα Για: Στήλες με ασύμμετρη κατανομή δεδομένων (π.χ., ενεργές έναντι ανενεργών εγγραφών).


49) Πώς γίνεται η ασφαλής μετεγκατάσταση δεδομένων μεταξύ περιβαλλόντων SQL Server;

Η ασφαλής μετεγκατάσταση δεδομένων περιλαμβάνει σχεδιασμό για συνέπεια, χρόνος διακοπής λειτουργίας και επαναφορά.

Καλυτερα Πρακτικές:

  1. Χρήση συναλλακτική αναπαραγωγή or καταγραφή δεδομένων αλλαγής (CDC) για ζωντανό συγχρονισμό.
  2. Απενεργοποιήστε προσωρινά τους περιορισμούς και τις ενεργοποιήσεις.
  3. Χρήση BCP or SSIS για μαζική μεταφορά δεδομένων.
  4. Επικυρώστε τον αριθμό γραμμών και τα αθροίσματα ελέγχου.
  5. Να εκτελείτε πάντα ελέγχους ακεραιότητας μετά τη μετεγκατάσταση (DBCC CHECKDB).

Παράδειγμα:

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

Η δοκιμή σεναρίων μετεγκατάστασης κατά την προετοιμασία (staging) δεν είναι διαπραγματεύσιμη.


50) Πώς εντοπίζετε και διορθώνετε προβλήματα ερωτημάτων που είναι ευαίσθητα σε παραμέτρους (PSQ);

Τα ερωτήματα που είναι ευαίσθητα στις παραμέτρους εκτελούνται με ασυνέπεια με βάση τις τιμές των παραμέτρων — μια συχνή πρόκληση στον πραγματικό κόσμο.

Ανίχνευση: Χρήση Κατάστημα ερωτημάτων or sys.dm_exec_query_stats για να προσδιορίσετε πολλαπλά σχέδια για ένα ερώτημα.

Στρατηγικές Διόρθωσης:

  1. Χρήση ΕΠΙΛΟΓΗ (ΕΠΑΝΑΜΕΤΑΓΡΑΦΗ) για κάθε εκτέλεση.
  2. Χρήση ΒΕΛΤΙΣΤΟΠΟΙΗΣΗ ΓΙΑ ΑΓΝΩΣΤΑ για να δημιουργηθεί ένα γενικό σχέδιο.
  3. δημιουργώ οδηγοί σχεδίων για την επιβολή βέλτιστων διαδρομών εκτέλεσης.
  4. Χρήση υποδείξεις ερωτήματος μόνο εάν είναι απαραίτητο.

Τα ζητήματα που είναι ευαίσθητα στις παραμέτρους απαιτούν εξισορρόπηση μεταξύ σταθερότητας σχεδίου και προβλεψιμότητας απόδοσης.

🔍 Κορυφαίες ερωτήσεις συνέντευξης T-SQL με σενάρια πραγματικού κόσμου και στρατηγικές απαντήσεις

1) Ποια είναι η διαφορά μεταξύ INNER JOIN και LEFT JOIN στην T-SQL;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να αξιολογήσει την κατανόησή σας σχετικά με τις λειτουργίες σύνδεσης και τον τρόπο διαχείρισης των σχέσεων δεδομένων σε ερωτήματα SQL.

Παράδειγμα απάντησης: An INNER JOIN επιστρέφει μόνο τις γραμμές που έχουν αντίστοιχες τιμές και στους δύο πίνακες, ενώ ένα LEFT JOIN Επιστρέφει όλες τις γραμμές από τον αριστερό πίνακα, μαζί με τις αντίστοιχες γραμμές από τον δεξιό πίνακα. Εάν δεν υπάρχει αντιστοίχιση, επιστρέφονται τιμές NULL για τις στήλες από τον δεξιό πίνακα. Αυτή η διάκριση είναι κρίσιμη κατά την εργασία με μερικές ή προαιρετικές σχέσεις σε βάσεις δεδομένων.


2) Πώς θα εντοπίζατε και θα αφαιρούσατε διπλότυπες εγγραφές από έναν πίνακα σε T-SQL;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να δει την ικανότητά σας να χρησιμοποιείτε συναρτήσεις παραθύρου και CTE για να χειρίζεστε ζητήματα ποιότητας δεδομένων.

Παράδειγμα απάντησης: Θα χρησιμοποιούσα μια έκφραση κοινού πίνακα (CTE) σε συνδυασμό με το ROW_NUMBER() συνάρτηση για την αναγνώριση διπλότυπων. Για παράδειγμα:

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

Αυτή η προσέγγιση βοηθά στην αφαίρεση διπλότυπων, διατηρώντας παράλληλα μία μοναδική εγγραφή για κάθε ομάδα.


3) Μπορείτε να εξηγήσετε τι είναι ένα CTE (Common Table Expression - Έκφραση Κοινού Πίνακα) και πότε θα το χρησιμοποιούσατε;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής ελέγχει τις γνώσεις σας σχετικά με τη δομή ερωτημάτων και τα προσωρινά σύνολα αποτελεσμάτων.

Παράδειγμα απάντησης: Ένα CTE είναι ένα προσωρινό σύνολο αποτελεσμάτων που ορίζεται εντός του εύρους εκτέλεσης ενός μεμονωμένου ερωτήματος. Είναι χρήσιμο για την απλοποίηση σύνθετων συνδέσεων και υποερωτημάτων, τη βελτίωση της αναγνωσιμότητας και την δυνατότητα επαναλαμβανόμενων ερωτημάτων. Στον προηγούμενο ρόλο μου, χρησιμοποιούσα συχνά CTE για να αναλύσω τη λογική συσσωμάτωσης πολλαπλών βημάτων σε πιο συντηρήσιμα στοιχεία.


4) Πώς χειρίζεστε τη ρύθμιση της απόδοσης σε ερωτήματα T-SQL;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να αξιολογήσει την εμπειρία σας με τη βελτιστοποίηση ερωτημάτων και την αντιμετώπιση προβλημάτων απόδοσης.

Παράδειγμα απάντησης: Ξεκινώ εξετάζοντας το σχέδιο εκτέλεσης για να εντοπίσω αργές λειτουργίες, όπως σαρώσεις πινάκων ή ακριβές ενώσεις. Στη συνέχεια, ελέγχω για ελλείποντα ευρετήρια, περιττά υποερωτήματα ή αναποτελεσματικές ενώσεις. Αναλύω επίσης στατιστικά στοιχεία και χρησιμοποιώ στρατηγικές δημιουργίας ευρετηρίου, όπως κάλυψη ευρετηρίων ή φιλτραρισμένων ευρετηρίων, για βελτίωση της απόδοσης. Τέλος, εξετάζω τη λογική των ερωτημάτων για να διασφαλίσω ότι αξιοποιεί λειτουργίες που βασίζονται σε σύνολα αντί για επεξεργασία γραμμή προς γραμμή.


5) Περιγράψτε μια περίπτωση που χρειάστηκε να εντοπίσετε σφάλματα σε ένα ερώτημα που εκτελούνταν αργά στην παραγωγή. Ποια βήματα ακολουθήσατε;

Αναμενόμενα από τον υποψήφιο: Αυτή η ερώτηση συμπεριφοράς αξιολογεί τις δεξιότητές σας στην επίλυση προβλημάτων και στην επικοινωνία στον πραγματικό κόσμο.

Παράδειγμα απάντησης: Σε μια προηγούμενη θέση, ένα ερώτημα αναφοράς χρειαζόταν πάνω από 20 λεπτά για να εκτελεστεί. Ανέλυσα το σχέδιο εκτέλεσης και ανακάλυψα ότι σε μία από τις ενώσεις έλειπε ένας δείκτης σε μια στήλη ξένου κλειδιού. Μετά τη δημιουργία του δείκτη και την ενημέρωση των στατιστικών στοιχείων, ο χρόνος εκτέλεσης του ερωτήματος μειώθηκε σε λιγότερο από 30 δευτερόλεπτα. Επίσης, κατέγραψα τη διόρθωση και την κοινοποίησα στην ομάδα για να αποτρέψω παρόμοια προβλήματα στο μέλλον.


6) Τι είναι οι προσωρινοί πίνακες και οι μεταβλητές πίνακα και πώς διαφέρουν;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής ελέγχει την κατανόησή σας σχετικά με τις επιλογές προσωρινής αποθήκευσης δεδομένων στην T-SQL.

Παράδειγμα απάντησης: Προσωρινοί πίνακες (#TempTable) δημιουργούνται στη βάση δεδομένων tempdb και υποστηρίζουν ευρετήρια, περιορισμούς και στατιστικά στοιχεία. Μεταβλητές πίνακα (@TableVar) αποθηκεύονται στη μνήμη και έχουν περιορισμένη υποστήριξη στατιστικών, γεγονός που τα καθιστά κατάλληλα για μικρότερα σύνολα δεδομένων. Οι προσωρινοί πίνακες είναι καλύτεροι για μεγάλα ή σύνθετα σύνολα δεδομένων, ενώ οι μεταβλητές πίνακα είναι πιο αποτελεσματικές για μικρά, βραχύβια δεδομένα.


7) Πώς θα χειριζόσασταν τον χειρισμό σφαλμάτων και τις συναλλαγές στην T-SQL;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής ελέγχει την κατανόησή σας σχετικά με την ακεραιότητα των συναλλαγών και τον χειρισμό εξαιρέσεων.

Παράδειγμα απάντησης: χρησιμοποιώ BEGIN TRANSACTION, COMMITκαι ROLLBACK δηλώσεις για να διασφαλιστεί η συνέπεια των δεδομένων. Συμπεριλαμβάνω επίσης TRY...CATCH μπλοκ για την ομαλή διαχείριση σφαλμάτων. Για παράδειγμα:

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

Αυτή η προσέγγιση αποτρέπει τις μερικές ενημερώσεις δεδομένων όταν προκύπτουν σφάλματα.


8) Πώς χρησιμοποιείτε συναρτήσεις παραθύρου στην T-SQL και μπορείτε να δώσετε ένα παράδειγμα;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής θέλει να αξιολογήσει την επάρκειά σας σε προηγμένα αναλυτικά ερωτήματα.

Παράδειγμα απάντησης: Οι συναρτήσεις παραθύρου επιτρέπουν υπολογισμούς σε σύνολα γραμμών που σχετίζονται με την τρέχουσα γραμμή χωρίς να συμπτυχθούν δεδομένα. Για παράδειγμα:

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

Αυτό αποδίδει αριθμούς κατάταξης στους υπαλλήλους με βάση τον μισθό, διευκολύνοντας την ανάλυση των τάσεων απόδοσης.


9) Πείτε μου για ένα σύνθετο έργο T-SQL στο οποίο εργαστήκατε και πώς αντιμετωπίσατε τις προκλήσεις του.

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής αναζητά βάθος στην εμπειρία, την επίλυση προβλημάτων και την ομαδική εργασία.

Παράδειγμα απάντησης: Στον τελευταίο μου ρόλο, δημιούργησα έναν αγωγό ETL αποθήκης δεδομένων χρησιμοποιώντας αποθηκευμένες διαδικασίες T-SQL. Η πρόκληση ήταν η αποτελεσματική διαχείριση μεγάλων όγκων δεδομένων. Βελτιστοποίησα ερωτήματα με διαμερισμένους πίνακες, σταδιακές φορτώσεις και μαζική επεξεργασία. Συντονίστηκα επίσης με την ομάδα BI για να διασφαλίσω συνεπή σχέδια σχήματος και βελτιωμένη ταχύτητα αναφοράς κατά πάνω από 40%.


10) Πώς θα χειριζόσασταν μια περίπτωση όπου μια αποθηκευμένη διαδικασία που γράψατε προκάλεσε αδιέξοδο στην παραγωγή;

Αναμενόμενα από τον υποψήφιο: Ο συνεντευξιαστής δοκιμάζει τη διαχείριση κρίσεων και την τεχνική σας επίγνωση.

Παράδειγμα απάντησης: Θα προσδιόριζα πρώτα το αδιέξοδο χρησιμοποιώντας τον SQL Server. sys.dm_tran_locks και γραφήματα αδιεξόδου. Στη συνέχεια, θα ανέλυα τη σειρά πρόσβασης σε πόρους και θα αναδιαμόρφωνα τη διαδικασία για να αποκτήσω κλειδώματα σε μια συνεπή ακολουθία. Στην προηγούμενη δουλειά μου, εφάρμοσα επίσης λογική επανάληψης για τις επηρεαζόμενες συναλλαγές και προγραμμάτισα τακτική παρακολούθηση για την έγκαιρη ανίχνευση παρόμοιων μοτίβων.

Συνοψίστε αυτήν την ανάρτηση με: