คำถามและคำตอบในการสัมภาษณ์ T-SQL 50 อันดับแรก (2026)

คำถามและคำตอบสัมภาษณ์ T-SQL

กำลังเตรียมตัวสำหรับการสัมภาษณ์ T-SQL หรือไม่? ถึงเวลาที่จะเพิ่มพูนความเข้าใจของคุณเกี่ยวกับการทำงานของฐานข้อมูลอย่างแท้จริงภายใต้พื้นผิว ด้วย คำถามสัมภาษณ์ T-SQLผู้สรรหาบุคลากรจะประเมินไม่เพียงแค่การจดจำไวยากรณ์เท่านั้น แต่ยังรวมถึงคำสั่งของคุณในการจัดการข้อมูล การเพิ่มประสิทธิภาพ และการจัดโครงสร้างเชิงตรรกะด้วย

โอกาสในสายงานนี้ยังคงขยายตัวอย่างต่อเนื่อง เนื่องจากธุรกิจต่างๆ ต้องพึ่งพาข้อมูลเชิงลึกที่ขับเคลื่อนด้วยข้อมูล ผู้สมัครที่มีความเชี่ยวชาญทางเทคนิคที่แข็งแกร่ง ทักษะการวิเคราะห์ และความสามารถในการแก้ปัญหาจริงจะโดดเด่นเป็นพิเศษ ไม่ว่าจะเป็นมือใหม่หรือมืออาชีพที่มีประสบการณ์ 5 ถึง 10 ปี การเข้าใจคำถามและคำตอบทั้งในระดับพื้นฐานและขั้นสูง ช่วยให้หัวหน้าทีม ผู้จัดการ และเจ้าหน้าที่เทคนิคอาวุโสสามารถระบุชุดทักษะ SQL ที่แข็งแกร่งและประสบการณ์ระดับรากได้

คู่มือของเราดึงข้อมูลเชิงลึกจากผู้จัดการการจ้างงานกว่า 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 พร้อมตัวอย่าง

การเข้าร่วมใน T-SQL จะรวมแถวจากสองตารางหรือมากกว่าโดยอิงตามคอลัมน์ที่เกี่ยวข้อง การทำความเข้าใจประเภทของข้อมูลเหล่านี้เป็นสิ่งสำคัญสำหรับการสืบค้นข้อมูลเชิงสัมพันธ์

ประเภทการเข้าร่วม Descriptไอออน ตัวอย่างไวยากรณ์
INNER JOIN ส่งคืนเฉพาะแถวที่ตรงกันเท่านั้น SELECT * FROM A INNER JOIN B ON A.id = B.id;
LEFT JOIN ทั้งหมดจากซ้าย + แมตช์จากขวา 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) Common Table Expressions (CTEs) คืออะไร และมีข้อดีอะไรบ้าง

Common Table Expression (CTE) จะให้ชุดผลลัพธ์ที่มีชื่อชั่วคราวซึ่งสามารถอ้างอิงได้ภายใน SELECT, INSERT, UPDATEหรือ DELETE คำสั่งนี้ช่วยให้อ่านง่ายขึ้นและลดความซับซ้อนของการค้นหาแบบเรียกซ้ำ

ข้อดี:

  • ปรับปรุงความชัดเจนของแบบสอบถามและการบำรุงรักษา
  • เปิดใช้งานการเรียกซ้ำ (สำหรับข้อมูลลำดับชั้นเช่นแผนผังองค์กร)
  • ช่วยหลีกเลี่ยงการสอบถามซ้ำ
  • เพิ่มการแบ่งส่วนในสคริปต์ขนาดใหญ่

ตัวอย่าง:

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

4) ตารางชั่วคราวและตัวแปรตารางใน T-SQL แตกต่างกันอย่างไร

ทั้งสองอย่างใช้ในการจัดเก็บผลลัพธ์กลาง แต่พฤติกรรมและขอบเขตของทั้งสองอย่างแตกต่างกันอย่างมาก

ลักษณะ โต๊ะชั่วคราว (#Temp) ตัวแปรตาราง (@TableVar)
เก็บไว้ใน เทมป์ดีบี หน่วยความจำ (การใช้งาน TempDB แบบจำกัด)
ขอบเขตการทำธุรกรรม ติดตามธุรกรรม อิสระจากการทำธุรกรรม
ดัชนี ที่สนับสนุน ถูก จำกัด
ประสิทธิภาพ ดีกว่าสำหรับชุดข้อมูลขนาดใหญ่ ดีกว่าสำหรับชุดข้อมูลขนาดเล็ก

ตัวอย่าง:

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

ใช้ตารางชั่วคราวเมื่อทำงานกับชุดข้อมูลขนาดใหญ่หรือต้องการดัชนี


5) อธิบายแนวคิดของธุรกรรมใน T-SQL และวงจรชีวิตของพวกเขา

ธุรกรรมใน T-SQL ช่วยให้มั่นใจว่าลำดับการดำเนินการจะดำเนินการเป็นหน่วยตรรกะเดียว วงจรชีวิตประกอบด้วย เริ่มต้นการทำธุรกรรม, COMMITและ ย้อนกลับ.

ระยะ Descriptไอออน
เริ่มต้นการทำธุรกรรม เริ่มการทำธุรกรรม
ทำธุรกรรม บันทึกการเปลี่ยนแปลงทั้งหมดอย่างถาวร
ธุรกรรมย้อนกลับ เลิกทำการดำเนินการทั้งหมดตั้งแต่ 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) ฟังก์ชันหน้าต่างคืออะไร และควรใช้เมื่อใด?

ฟังก์ชัน Window จะทำการคำนวณข้ามแถวที่เกี่ยวข้องกับแถวปัจจุบัน โดยไม่ยุบรวมเป็นผลลัพธ์เดียว ฟังก์ชันเหล่านี้มีประโยชน์สำหรับการจัดอันดับ ผลรวมต่อเนื่อง และค่าเฉลี่ยเคลื่อนที่

ตัวอย่าง:

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 คืออะไร และใช้เพื่ออะไร

โพรซีเดอร์ที่เก็บไว้ (Stored Procedure) คือชุดคำสั่ง SQL อย่างน้อยหนึ่งคำสั่งที่คอมไพล์ไว้ล่วงหน้า ซึ่งจัดเก็บไว้บนเซิร์ฟเวอร์ โพรซีเดอร์เหล่านี้ช่วยเพิ่มประสิทธิภาพ ความปลอดภัย และความสามารถในการนำกลับมาใช้ใหม่ โดยช่วยให้คุณสามารถห่อหุ้มตรรกะและดำเนินการซ้ำได้โดยไม่ต้องคอมไพล์ซ้ำ โพรซีเดอร์ที่เก็บไว้ช่วยลดปริมาณการรับส่งข้อมูลบนเครือข่ายและรองรับพารามิเตอร์สำหรับการดำเนินการแบบไดนามิก

ตัวอย่าง:

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

ประโยชน์ที่ได้รับ:

  • ประสิทธิภาพดีขึ้นเนื่องจากการคอมไพล์ล่วงหน้า
  • เพิ่มความปลอดภัยด้วยการดำเนินการที่ควบคุมได้
  • การบำรุงรักษาโค้ดและการสร้างโมดูลที่ง่ายขึ้น

12) อธิบายความแตกต่างระหว่างกระบวนการที่เก็บไว้และฟังก์ชันใน T-SQL

แง่มุม ขั้นตอนการเก็บ ฟังก์ชัน
ประเภทผลตอบแทน สามารถคืนค่าได้หลายค่า จะต้องส่งคืนค่าหรือตารางเดี่ยว
ใช้ใน SELECT ไม่ได้รับอนุญาต ได้รับอนุญาต
จัดการข้อผิดพลาด TRY…CATCH ได้รับการสนับสนุน ถูก จำกัด
การกระทำ ดำเนินการผ่าน EXEC ใช้แบบอินไลน์กับ SQL
การควบคุมธุรกรรม ที่สนับสนุน ไม่ได้รับการสนับสนุน

ตัวอย่าง:

  • ขั้นตอน: EXEC GetEmployeeDetails 'HR';
  • ฟังก์ชั่น: SELECT dbo.GetSalary(101);

ฟังก์ชั่นเหมาะสำหรับการคำนวณ ส่วนขั้นตอนการทำงานเหมาะสำหรับตรรกะทางธุรกิจและการจัดการข้อมูล


13) ทริกเกอร์ใน T-SQL คืออะไร และมีประเภทใดบ้าง

ทริกเกอร์คือโพรซีเดอร์จัดเก็บพิเศษที่ดำเนินการโดยอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่าง (INSERT, UPDATE, DELETE) บนตารางหรือมุมมอง ทริกเกอร์ถูกใช้เพื่อบังคับใช้กฎทางธุรกิจ ตรวจสอบการเปลี่ยนแปลง หรือรักษาความสมบูรณ์ของข้อมูลอ้างอิง

ประเภท Descriptไอออน
หลังจากทริกเกอร์ ไฟไหม้หลังจากงานเสร็จสิ้น
แทนทริกเกอร์ ดำเนินการแทนเหตุการณ์ที่กระตุ้น

ตัวอย่าง:

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 และกรณีการใช้งาน

การขอ MERGE คำสั่งดำเนินการ INSERT, อัพเดทและ ลบ การดำเนินการในคำสั่งเดียว เหมาะอย่างยิ่งสำหรับการซิงโครไนซ์สองตาราง

ตัวอย่างไวยากรณ์:

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 มีกี่ประเภท?

ประเภท Descriptไอออน ตัวอย่าง
เกลา ส่งคืนค่าเดียว CREATE FUNCTION GetTax(@Salary DECIMAL) RETURNS DECIMAL
ตารางอินไลน์ที่มีค่า ส่งคืนตารางผ่านช่องทางเดียว SELECT RETURN SELECT * FROM Employees WHERE Dept = 'HR'
ตารางค่าหลายคำสั่ง ส่งคืนตารางหลังจากคำสั่งหลายคำสั่ง มีประโยชน์สำหรับตรรกะที่ซับซ้อน

ฟังก์ชันส่งเสริมการนำโค้ดกลับมาใช้ใหม่และปรับปรุงการออกแบบแบบสอบถามแบบโมดูลาร์

ควรเป็นแบบกำหนดได้ (ส่งคืนผลลัพธ์เดียวกันสำหรับอินพุตเดียวกัน) เมื่อใดก็ตามที่เป็นไปได้เพื่อการเพิ่มประสิทธิภาพการทำงาน


18) Normalization คืออะไร และมีข้อดีข้อเสียอะไรบ้าง?

การทำให้เป็นมาตรฐาน (Normalization) คือกระบวนการจัดระเบียบข้อมูลในฐานข้อมูลเพื่อลดความซ้ำซ้อนและปรับปรุงความสมบูรณ์ของข้อมูล ซึ่งประกอบด้วยการแบ่งตารางออกเป็นเอนทิตีย่อยๆ ที่เกี่ยวข้องกัน

แบบฟอร์มปกติ กฎ ตัวอย่าง
1NF กำจัดกลุ่มที่ทำซ้ำ แยกข้อมูลที่คั่นด้วยเครื่องหมายจุลภาค
2NF ลบการอ้างอิงบางส่วน ให้แน่ใจว่ามีการอ้างอิงคีย์หลักอย่างครบถ้วน
3NF ลบการอ้างอิงแบบสกรรมกริยา ย้ายคุณสมบัติที่ได้รับมา

ข้อดี:

  • ลดความซ้ำซ้อน
  • รับประกันความสอดคล้องของข้อมูล
  • ทำให้การบำรุงรักษาง่ายขึ้น

ข้อเสีย:

  • การรวมที่ซับซ้อน
  • การแลกเปลี่ยนประสิทธิภาพที่เป็นไปได้สำหรับแบบสอบถามเชิงวิเคราะห์

19) ข้อจำกัดประเภทต่างๆ ใน ​​T-SQL มีอะไรบ้าง

ข้อจำกัดบังคับใช้กฎเกณฑ์เกี่ยวกับความสมบูรณ์ของข้อมูลภายในตาราง

การ จำกัด จุดมุ่งหมาย ตัวอย่าง
คีย์หลัก ระบุแต่ละแถวอย่างเฉพาะเจาะจง PRIMARY KEY (EmpID)
คีย์ต่างประเทศ เชื่อมโยงสองตาราง FOREIGN KEY (DeptID)
ที่ไม่ซ้ำกัน รับประกันค่าคอลัมน์ที่ไม่ซ้ำกัน UNIQUE (Email)
ตรวจสอบ ตรวจสอบช่วงข้อมูล CHECK (Age >= 18)
เริ่มต้น ให้ค่าเริ่มต้น 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 รองรับสิ่งต่อไปนี้:

ระดับการแยก Descriptไอออน อ่านสกปรก อ่านซ้ำไม่ได้ อ่านผี
อ่านไม่เข้าใจ อ่านข้อมูลที่ยังไม่ได้ยืนยัน ใช่ ใช่ ใช่
อ่านคำมั่นสัญญา ค่าเริ่มต้น; ล็อคป้องกันการอ่านข้อมูลสกปรก ไม่ ใช่ ใช่
อ่านซ้ำได้ ป้องกันการเปลี่ยนแปลงข้อมูลจนกว่าจะยืนยัน ไม่ ไม่ ใช่
ซีเรียลไลซ์ได้ การแยกส่วนอย่างสมบูรณ์; การล็อคสูงสุด ไม่ ไม่ ไม่
ภาพรวม ใช้การกำหนดเวอร์ชัน ไม่ใช่การล็อค ไม่ ไม่ ไม่

ตัวอย่าง:

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

ใช้ ภาพรวม สำหรับระบบที่มีการทำงานพร้อมกันสูงเพื่อลดการบล็อกโดยไม่กระทบต่อความสอดคล้อง


22) เดดล็อกใน SQL Server คืออะไร และจะป้องกันได้อย่างไร

A การหยุดชะงัก เกิดขึ้นเมื่อธุรกรรมสองรายการมีล็อกที่แต่ละรายการต้องการ ส่งผลให้เกิดภาวะเดดล็อก SQL Server จะตรวจจับและยุติธุรกรรมหนึ่งรายการโดยอัตโนมัติว่าเป็นเหยื่อของภาวะเดดล็อก

ตัวอย่างสถานการณ์:

  • ธุรกรรม A ล็อค Table1 จากนั้นรอ Table2
  • ธุรกรรม B ล็อค Table2 จากนั้นรอ Table1

เทคนิคการป้องกัน:

  1. เข้าถึงทรัพยากรตามลำดับเดียวกัน
  2. รักษาธุรกรรมให้สั้น
  3. ใช้ระดับการแยกที่เหมาะสม
  4. หลีกเลี่ยงการโต้ตอบของผู้ใช้ภายในธุรกรรม

ใช้ SQL Profiler หรือ Extended Events เพื่อติดตามเดดล็อกแบบเรียลไทม์


23) อธิบายความแตกต่างระหว่างการควบคุมการทำงานพร้อมกันแบบมองโลกในแง่ร้ายและมองโลกในแง่ดี

ประเภท Descriptไอออน กลไกการล็อค ใช้กรณี
ในแง่ร้าย ล็อคข้อมูลระหว่างทำธุรกรรม การล็อคแบบหนัก สภาพแวดล้อมที่มีความขัดแย้งสูง
ในแง่ดี ใช้การกำหนดเวอร์ชันแถว ตรวจสอบก่อนคอมมิท การล็อคขั้นต่ำ ภาระงานที่อ่านหนักและมีข้อขัดแย้งน้อย

ตัวอย่าง:

  • มองโลกในแง่ร้าย: ค่าเริ่มต้น READ COMMITTED การล็อค
  • มองโลกในแง่ดี: SNAPSHOT การแยกด้วยการกำหนดเวอร์ชันแถว

การทำงานพร้อมกันที่มองโลกในแง่ดีช่วยเพิ่มประสิทธิภาพให้กับระบบที่มีการอ่านข้อมูลจำนวนมากและอัปเดตไม่บ่อยครั้ง


24) คุณจะวิเคราะห์และเพิ่มประสิทธิภาพแบบสอบถาม T-SQL ที่ทำงานช้าได้อย่างไร

  1. ตรวจสอบแผนการดำเนินการ: ระบุการสแกน ดัชนีที่หายไป และการดำเนินการที่มีต้นทุนสูง
  2. ใช้ SET STATISTICS IO/TIME: วิเคราะห์การใช้งาน I/O และ CPU
  3. หลีกเลี่ยงเคอร์เซอร์และลูป: แทนที่ด้วยการดำเนินการตามชุด
  4. การเพิ่มประสิทธิภาพดัชนี: เพิ่มหรือจัดระเบียบดัชนีที่แยกส่วนใหม่
  5. การดมกลิ่นพารามิเตอร์: ใช้ OPTION (RECOMPILE) เพื่อสร้างแผนใหม่

ตัวอย่าง:

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

ตรวจสอบการสอบถามที่ช้าเป็นประจำด้วย มุมมองการจัดการแบบไดนามิก (DMV) กดไลก์ sys.dm_exec_query_stats เป็นแนวทางปฏิบัติที่ดีที่สุด


25) Dynamic SQL คืออะไร และมีข้อดีและความเสี่ยงอะไรบ้าง?

SQL แบบไดนามิกช่วยให้คุณสามารถสร้างคำสั่ง SQL แบบไดนามิกในระหว่างการรันไทม์โดยใช้ตัวแปร

ตัวอย่าง:

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

ข้อดี:

  • ความยืดหยุ่นสำหรับชื่อตารางตัวแปรหรือตัวกรอง
  • สามารถนำกลับมาใช้ใหม่ได้สำหรับ schema หลาย ๆ แบบ

ข้อเสีย:

  • ความเสี่ยงที่จะ ด้วย SQL Injection หากไม่ได้กำหนดพารามิเตอร์
  • ยากกว่าที่จะแก้ไขและบำรุงรักษา

ใช้เสมอ sp_executesql พร้อมพารามิเตอร์เพื่อความปลอดภัย


26) Temporary Object ใน T-SQL คืออะไร และแตกต่างกันอย่างไร

วัตถุชั่วคราวจะถูกเก็บไว้ใน เทมป์ดีบี และช่วยจัดการข้อมูลกลาง

ประเภทวัตถุ ขอบเขต ตัวอย่าง
ตารางอุณหภูมิท้องถิ่น เฉพาะเซสชัน 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 คืออะไร

ประโยค รายการที่ซ้ำกัน ประสิทธิภาพ ใช้กรณี
ยูเนี่ยน ลบรายการที่ซ้ำกัน ช้ากว่า (ใช้การเรียงลำดับ/แยกแยะ) การรวมชุดผลลัพธ์อย่างสะอาด
ยูเนี่ยนทั้งหมด เก็บข้อมูลซ้ำ ได้เร็วขึ้น การรวมหรือการโยกย้ายข้อมูล

ตัวอย่าง:

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 – ซีพียู และระยะเวลา
    • 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การ Descriptไอออน ประสิทธิภาพ ใช้กรณี
การค้นหาดัชนี นำทางไปยังแถวที่ตรงกันโดยตรง รวดเร็ว การสอบถามแบบเลือกสรรอย่างเข้มงวด
การสแกนดัชนี อ่านรายการดัชนีทั้งหมดตามลำดับ ช้าลง แบบสอบถามที่มีการเลือกต่ำ

ตัวอย่าง:

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. การดำเนินการโหมดแบตช์ บนดัชนีคอลัมน์สโตร์สำหรับการวิเคราะห์
  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: ความเข้มข้นของ I/O
  • AvgDuration: ความหน่วงในการดำเนินการ

แนวทางนี้ช่วยให้ผู้ดูแลฐานข้อมูลสามารถแยกแบบสอบถามจำนวนมากออกได้ก่อนที่ผู้ใช้จะสังเกตเห็นว่าประสิทธิภาพลดลง


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) ความแตกต่างระหว่างการมิเรอร์ฐานข้อมูล การจำลองข้อมูล และการจัดส่งบันทึกคืออะไร

ลักษณะ จุดมุ่งหมาย เรียลไทม์ ล้มเหลว ความซับซ้อน
มิเรอร์ สำเนาฐานข้อมูลที่มีความพร้อมใช้งานสูง ใช่ อัตโนมัติ กลาง
การทำซ้ำ การกระจายข้อมูลระหว่างฐานข้อมูล เป็นบางส่วน ด้วยมือ จุดสูง
การขนส่งท่อนซุง กลยุทธ์ 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 จะเป็นระดับแอปพลิเคชัน DBA จะต้องตรวจสอบกระบวนการจัดเก็บและบันทึก สำหรับการดำเนินการแบบไม่มีพารามิเตอร์


47) คุณใช้ Extended Events เพื่อตรวจสอบประสิทธิภาพเชิงลึกได้อย่างไร

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

การทดสอบสคริปต์การไมเกรชันในการจัดเตรียมเป็นสิ่งที่ไม่สามารถต่อรองได้


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 เพื่อจัดการกับปัญหาคุณภาพข้อมูล

ตัวอย่างคำตอบ: ฉันจะใช้ Common Table Expression (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 อย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินประสบการณ์ของคุณในการเพิ่มประสิทธิภาพการค้นหาและการแก้ไขปัญหาประสิทธิภาพ

ตัวอย่างคำตอบ: ผมเริ่มต้นด้วยการตรวจสอบแผนการดำเนินการเพื่อระบุการดำเนินการที่ล่าช้า เช่น การสแกนตารางหรือการ join ที่มีค่าใช้จ่ายสูง จากนั้นผมจะตรวจหาดัชนีที่หายไป ซับเควรีที่ซ้ำซ้อน หรือการ join ที่ไม่มีประสิทธิภาพ นอกจากนี้ ผมยังวิเคราะห์สถิติและใช้กลยุทธ์การทำดัชนี เช่น การครอบคลุมดัชนีหรือดัชนีที่กรองแล้ว เพื่อเพิ่มประสิทธิภาพการทำงาน สุดท้าย ผมตรวจสอบตรรกะของคิวรีเพื่อให้แน่ใจว่าใช้ประโยชน์จากการดำเนินการแบบ set-based แทนการประมวลผลแบบแถวต่อแถว


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 pipeline ของคลังข้อมูลโดยใช้กระบวนการจัดเก็บแบบ T-SQL ความท้าทายคือการจัดการข้อมูลปริมาณมากอย่างมีประสิทธิภาพ ผมปรับแต่งคิวรีด้วยตารางแบบแบ่งพาร์ติชัน โหลดแบบเพิ่ม และการประมวลผลแบบแบตช์ นอกจากนี้ ผมยังประสานงานกับทีม BI เพื่อให้มั่นใจว่าการออกแบบ schema สอดคล้องกันและปรับปรุงความเร็วในการรายงานมากกว่า 40%


10) คุณจะจัดการกับสถานการณ์ที่กระบวนการจัดเก็บที่คุณเขียนทำให้เกิดการหยุดชะงักในการผลิตอย่างไร

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์กำลังทดสอบการจัดการวิกฤตและความตระหนักทางเทคนิคของคุณ

ตัวอย่างคำตอบ: ก่อนอื่นฉันจะระบุจุดตายโดยใช้ SQL Server sys.dm_tran_locks และกราฟเดดล็อก จากนั้นผมจะวิเคราะห์ลำดับการเข้าถึงทรัพยากรและปรับโครงสร้างกระบวนการเพื่อให้ได้ล็อกตามลำดับที่สอดคล้องกัน ในงานก่อนหน้านี้ ผมได้นำตรรกะการลองใหม่มาใช้กับธุรกรรมที่ได้รับผลกระทบ และกำหนดเวลาการตรวจสอบอย่างสม่ำเสมอเพื่อตรวจจับรูปแบบที่คล้ายคลึงกันตั้งแต่เนิ่นๆ

สรุปโพสต์นี้ด้วย: