1. Nền Tảng SQL Server
Giới thiệu
Phần này trình bày các kiến thức nền tảng về SQL Server và T-SQL, từ kiến trúc hệ thống đến các câu lệnh cơ bản nhất. Đây là nền tảng bắt buộc để hiểu sâu hơn về hiệu suất, indexing và các chủ đề nâng cao.
Nội dung chính
Kiến trúc SQL Server
- T-SQL Cơ bản & Kiến trúc - SQL Server Engine, database files, memory architecture, T-SQL fundamentals
Kiểu dữ liệu
- Kiểu Dữ liệu - Numeric, String, DateTime, Binary types; Unicode vs non-Unicode; type conversion
DDL - Data Definition Language
- DDL - CREATE/ALTER/DROP cho database objects, constraints, identity, sequences, temporal tables, indexes
DML - Data Manipulation Language
- DML - INSERT, UPDATE, DELETE, MERGE, BULK operations, OUTPUT clause, transactions
Câu hỏi phỏng vấn (Sắp xếp từ dễ đến khó)
Mức độ: Dễ (Junior)
- SQL Server là gì? Sự khác biệt giữa SQL Server instance và database là gì?
- Các file database trong SQL Server có những loại nào? (
.mdf,.ndf,.ldf) SELECT,WHERE,ORDER BY,GROUP BYkhác nhau như thế nào về mục đích sử dụng?HAVINGvàWHEREkhác nhau như thế nào?- Sự khác biệt giữa
INNER JOIN,LEFT JOIN,RIGHT JOIN, vàFULL OUTER JOIN? NULLtrong SQL Server là gì? Cách xử lý NULL vớiIS NULL,ISNULL(),COALESCE()?DISTINCTdùng để làm gì? Ví dụ thực tế?- Sự khác biệt giữa
charvàvarchar? Giữavarcharvànvarchar? int,bigint,smallint,tinyintkhác nhau ở điểm gì?PRIMARY KEYvàUNIQUEconstraint khác nhau như thế nào?NOT NULLconstraint hoạt động như thế nào?DEFAULTconstraint dùng để làm gì?- Câu lệnh
INSERT INTO...VALUEScơ bản viết như thế nào? - Sự khác biệt giữa
DELETEvàTRUNCATE TABLE? IDENTITYcolumn là gì? Cú pháp khai báo như thế nào?
Mức độ: Trung bình (Mid-level)
CASEexpression (simple và searched) hoạt động như thế nào? Ví dụ thực tế?TOP NvàOFFSET-FETCHkhác nhau như thế nào? Cái nào nên dùng cho phân trang?- Các hàm xử lý chuỗi phổ biến:
LEN,SUBSTRING,CHARINDEX,REPLACE,TRIM? - Sự khác biệt giữa
GETDATE(),GETUTCDATE(),SYSDATETIME(), vàSYSUTCDATETIME()? DATEADD,DATEDIFF,DATEPARTdùng như thế nào?decimalvsfloatvsmoney- khi nào dùng cái nào? Tại sao không nên dùngfloatcho tiền tệ?datetimevsdatetime2vsdatetimeoffset- sự khác biệt và khi nào dùng?CASTvsCONVERTvsTRY_CASTvsTRY_CONVERT- khác nhau như thế nào?FOREIGN KEYconstraint là gì?ON DELETE CASCADEhoạt động như thế nào?CHECKconstraint dùng để làm gì? Ví dụ thực tế?UPDATEvớiJOINviết như thế nào?DELETEvớiJOINviết như thế nào?MERGEstatement (upsert) dùng để làm gì? Cú pháp cơ bản?OUTPUTclause trong DML dùng để làm gì?Computed columnlà gì? Sự khác biệt giữa persisted và non-persisted?Schemastrong SQL Server là gì? Tại sao nên dùng schemas thay vì tất cả trongdbo?
Mức độ: Khó (Senior)
- SQL Server Buffer Pool hoạt động như thế nào? Tại sao memory management quan trọng?
PagesvàExtentstrong SQL Server là gì? Ảnh hưởng đến hiệu năng như thế nào?- Plan Cache hoạt động như thế nào? Parameter sniffing là gì và khi nào gây ra vấn đề?
Implicit conversiontrong SQL Server là gì? Tại sao có thể gây ra index scan thay vì seek?Temporal Tables(system-versioned) là gì? Use case thực tế?SEQUENCEobject so vớiIDENTITYcolumn - ưu nhược điểm?NEWID()vsNEWSEQUENTIALID()vsIDENTITY- khi nào dùng cái nào? Tác động đến index fragmentation?BULK INSERTvsINSERT INTO...SELECT- khi nào dùng cái nào cho hiệu năng tốt nhất?- Set-based operations vs row-by-row (cursor) - vì sao nên tránh cursor trong SQL Server?
nvarchar(MAX)vsnvarchar(4000)- tác động đến hiệu năng và storage?INDEXtrong DDL - Clustered vs Nonclustered, khi nào tạo index trong CREATE TABLE và khi nào tách riêng?- Cascading referential actions (
CASCADE,SET NULL,NO ACTION) - tác động đến performance với large datasets?