Tải bản đầy đủ (.pdf) (5 trang)

Những thói quen tốt khi viết câu lệnh T-SQL- P2 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (285.38 KB, 5 trang )

tục làm việc với điều kiện cột “So4” được tạo với giá
trị mặc định DEFAULT hoặc cho phép NULL.
Thêm tiền tố cho wildcard để tăng tốc tìm kiếm
Sử dụng các ký tự thay thế (wildcard) thích hợp có
thể cải thiện hiệu suất câu truy vấn. Chẳng hạn bạn
muốn tìm kiếm trong bảng
AdventureWorks.Person.Contact tất cả LastNames
kết thúc bằng “sen”. Giả dụ rằng bạn đã xây dựng
một chỉ mục trên cột LastName. Nếu bạn viết câu
lệnh tìm kiếm như sau:
SELECT Distinct LastName
FROM Person.Contact
WHERE LastName LIKE '%sen'
Câu lệnh sử dụng ký tự phần trăm (%) để thay thế
cho không hoặc nhiều ký tự được theo sau bởi chuỗi
“sen” trong trường LastName. Điều này khiến máy
chủ SQL thực hiện thao tác quét chỉ mục nhằm tìm
kiếm tất cả các tên kết thúc bằng “sen” để giải quyết
câu truy vấn. Việc này rất có ý nghĩa bởi cho đến khi
toàn bộ bảng được quét, máy chủ SQL không thể
đảm bảo rằng đã tìm ra toàn bộ các bản ghi có
LastName kết thúc bằng “sen”.
Ngoài ra, nếu bạn đang tìm kiếm các bản ghi có
LastName dài đúng sáu ký tự và kết thúc bằng “sen”,
bạn có thể viết câu lệnh tìm kiếm như sau:
SELECT Distinct LastName
FROM Person.Contact
WHERE LastName LIKE '___sen’
Ở đây, câu lệnh sử dụng ký tự gạch dưới (_) để thay
thế cho một ký tự đơn. Ví dụ này tương tự với ví dụ ở
phần trên và sử dụng thao tác quét chỉ mục để giải


quyết. Một lần nữa, máy chủ SQL biết rằng cần phải
quét toàn bộ chỉ mục trước khi đảm bảo đã tìm thấy
tất cả các tên dài sáu ký tự và kết thúc bằng “sen”
trong bảng Person.Contact.
Máy chủ SQL có thể trả về kết quả nhanh hơn nếu nó
không phải đọc toàn bộ chỉ mục bằng cách sử dụng
cơ chế quét. Máy chủ SQL đủ thông minh để nhận
biết khi bạn đặt thêm tiền tố trước ký tự thay thế (%,
_, v.v ), nó có thể dùng một thao tác tìm kiếm chỉ
mục để tiến hành giải quyết tiêu chí tìm kiếm. Sau
đây là một ví dụ về câu lệnh tìm kiếm yêu cầu trả về
tất cả bản ghi có LastName bắt đầu bằng ký tự “A”
và kết thúc bằng “sen”:
SELECT Distinct LastName
FROM Person.Contact
WHERE LastName LIKE 'A%sen'


Bằng cách đặt ký tự “A” phía trước dấu phần trăm
(%) trong câu lệnh tìm kiếm, bạn đã cho máy chủ
SQL biết rằng nó có thể sử dụng một thao tác tìm
kiếm chỉ mục để giải quyết câu truy vấn. Một khi
máy chủ SQL đọc tới bản ghi cuối cùng có LastName
bắt đầu bằng ký tự “A”, nó biết rằng không còn bản
ghi nào có LastName bắt đầu bằng ký tự “A” nữa và
sẽ dừng lại.
Không phải tất cả ký tự thay thế đều cần thêm tiền tố
để máy chủ SQL dùng một thao tác tìm kiếm chỉ mục
nhằm giải quyết truy vấn. Sau đây là một ví dụ trong
đó câu lệnh sử dụng biểu thức thể hiện một tập hợp

ký tự thay thế và vẫn cho phép máy chủ SQL giải
quyết câu truy vấn bằng cách dùng một thao tác tìm
kiếm chỉ mục:
SELECT Distinct LastName
FROM Person.Contact
WHERE LastName LIKE '[A-M]%sen'


Câu lệnh T-SQL trên tìm kiếm toàn bộ LastName bắt
đầu bằng một ký tự bất kỳ trong khoảng từ “A” đến
“M” và kết thúc bằng “sen”. Các cú pháp sử dụng ký
tự thay thế khác trong đó chỉ rõ tập hợp các ký tự
cũng có thể gọi thao tác quét chỉ mục để giải quyết
tiêu chí tìm kiếm.


Chỉ dùng DISTINCT khi cần
Đặt từ khóa DISTINCT trong câu lệnh SELECT sẽ
loại bỏ các kết quả trùng lặp trong số những kết quả
trả về của câu truy vấn. Nó khiến máy chủ SQL phải
thực hiện thêm thao tác SORT để sắp xếp dữ liệu
nhằm nhận biết và loại bỏ các bản trùng lặp. Vì thế,
nếu bạn biết trước các kết quả trả về sẽ không trùng
lặp thì không nên dùng từ khóa DISTINCT trong câu
lệnh T-SQL. Với việc sử dụng từ khóa DISTINCT
trong câu truy vấn, bạn đã yêu cầu máy chủ SQL thực
hiện thao tác sắp xếp vào loại bỏ các kết quả trùng
lặp. Đây là phần công việc phụ thêm của máy chủ

×