Cơ chế hoạt động của Index Seek và Index Scan trong T-SQL là gì, và làm thế nào để tối ưu hóa các truy vấn có hiện tượng Table Scan trên các bảng dữ liệu lớn hàng triệu dòng?
1. Bản chất cơ chế hoạt động
- Index Seek: Query Optimizer sử dụng B-Tree Index để tìm kiếm trực tiếp các trang dữ liệu (data pages) chứa giá trị thỏa mãn điều kiện WHERE. Thao tác này cực kỳ hiệu quả, chỉ đọc một số lượng trang dữ liệu tối thiểu.
- Index Scan (hoặc Table Scan): Query Optimizer phải duyệt qua toàn bộ các trang dữ liệu của bảng hoặc index từ đầu đến cuối để tìm kiếm dữ liệu. Chi phí I/O và CPU tăng tuyến tính theo kích thước bảng.
2. Nguyên nhân dẫn đến Table Scan / Index Scan
- Thiếu Index phù hợp cho mệnh đề WHERE hoặc JOIN.
- Sử dụng hàm hoặc toán tử chuyển đổi kiểu dữ liệu lên cột được đánh Index (ví dụ:
WHERE YEAR(OrderDate) = 2023làm mất tác dụng của Index trên cộtOrderDate). - Cột đầu tiên trong Composite Index không được sử dụng trong điều kiện tìm kiếm (vi phạm quy tắc Left-most prefix).
- Bảng có kích thước quá nhỏ (SQL Server đánh giá Scan nhanh hơn Seek).
3. Phương pháp tối ưu hóa
- Sử dụng SARGable Predicates: Viết điều kiện truy vấn có thể tận dụng Index. Ví dụ thay vì
WHERE YEAR(OrderDate) = 2023, hãy dùngWHERE OrderDate >= '2023-01-01' AND OrderDate < '2024-01-01'. - Tạo Covering Index: Đưa các cột cần SELECT vào mệnh đề INCLUDE của Index để tránh việc Bookmark Lookup.
- Cập nhật Statistics: Chạy
UPDATE STATISTICSđịnh kỳ để Query Optimizer đưa ra Execution Plan chính xác.
4. Lưu ý thực chiến Enterprise
Đối với các hệ thống OLTP, việc để xảy ra Table Scan trên các bảng hàng triệu dòng trong các transaction thường xuyên sẽ gây nghẽn cổ chai CPU và Disk I/O, dẫn đến lock tranh chấp diện rộng. Luôn kiểm tra Execution Plan thực tế trên môi trường Staging với dữ liệu tương đương Production.
Làm Chủ Phỏng Vấn & Nâng Cao Trình Độ Chuyên Nghiệp
Hệ thống khóa học thực chiến chuẩn Enterprise giúp bạn tự tin chinh phục mọi kỳ phỏng vấn kỹ thuật và thăng tiến thu nhập.
Tải Tuyển Tập 100+ Câu Hỏi Phỏng Vấn Chuyên Sâu (PDF)
Bộ tài liệu chuẩn Senior do Unicode Academy tuyển chọn & biên soạn, hỗ trợ tải về định dạng PDF chuẩn in ấn.
Cần Mentor Phỏng Vấn Thử 1-1 & Tối Ưu CV?
Mô phỏng phỏng vấn kỹ thuật thực tế 1-1 qua Google Meet, nhận xét chi tiết điểm mạnh/yếu và sửa CV trực tiếp cùng giảng viên Unicode.
Kiểm Tra CV Chuẩn ATS Miễn Phí
Tải CV của bạn lên để hệ thống AI rà soát từ khóa kỹ năng, định dạng và tính điểm chuẩn nhà tuyển dụng.
Câu hỏi t-sql liên quan cùng chủ đề
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Stored Procedures trong dự án T-SQL? Entry
- Làm thế nào để tối ưu hóa hiệu năng và quản lý Try-Catch error handling trong dự án T-SQL? Entry
- Khi nào nên sử dụng câu lệnh Merge trong t-sql thay vì kết hợp nhiều câu lệnh Insert, Update và Delete riêng biệt? Junior
- Sự khác biệt giữa câu lệnh Truncate Table và Delete trong t-sql là gì? Khi nào Junior Developer nên chọn sử dụng Truncate thay vì Delete? Junior
- Làm thế nào để sử dụng biến bảng (Table Variable) và bảng tạm (Temporary Table) một cách hiệu quả trong T-SQL, và yếu tố nào quyết định việc lựa chọn giữa hai đối tượng này? Junior


