Tài liệu Những thói quen tốt khi viết câu lệnh T-SQL Phần 1 - Pdf 96

Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1)
Ngu

n:quantrimang.com
Quản Trị Mạng - Hiệu năng ứng dụng phụ thuộc vào rất nhiều yếu tố, trong đó
có một yếu tố rất quan trọng đó là thời gian để máy chủ SQL xử lý câu lệnh T-
SQL. Đôi khi thiết kế cơ sở dữ liệu và các yêu cầu truy vấn phức tạp làm cản trở
tốc độ thực thi của các câu lệnh T-SQL. Cách viết code từ
ng câu lệnh T-SQL
cũng có thể khiến máy chủ SQL phải làm việc nhiều hơn để xử lý truy vấn. Bài
viết sau đây sẽ giới thiệu cho bạn những thói quen tốt nên tập luyện khi viết code
T-SQL. Qua đó bạn có thể hiểu làm thế nào để viết các câu truy vấn tối ưu, tận
dụng tốt tài nguyên máy chủ SQL và cải thiện hiệu suất.
Ghi rõ tên cột trong câu lệnh SELECT
SELECT * FROM MyTable;
Bạn đã t
ừng viết câu lệnh như trên bao nhiêu lần?
Việc sử dụng dấu sao (*) cho cơ sở dữ liệu biết rằng bạn muốn trả về tất cả các
cột từ bảng (hoặc các bảng) được khai báo trong mệnh đề FROM. Đây không
phải là một thói quen tốt ngay cả khi bạn muốn tất cả các cột được trả về ứng
dụng. Tốt hơn bạn nên ghi rõ tên từng cộ
t trong bảng như sau:
SELECT ID, Description, DateModified FROM MyTable;
Việc khai báo rõ ràng tên các cột trong câu lệnh SELECT mang lại rất nhiều lợi
ích. Thứ nhất, máy chủ SQL sẽ chỉ trả về dữ liệu cần thiết cho ứng dụng chứ
không phải là một đống dữ liệu mà trong đó có nhiều thứ ứng dụng của bạn
không hề cần đến. Bằng cách chỉ yêu cầu trả về những dữ liệu cần thi
ết, bạn đã
góp phần tối ưu hóa khối lượng công việc máy chủ SQL cần thực hiện để thu
thập tất cả các cột của thông tin bạn yêu cầu. Ngoài ra, nhờ không sử dụng dấu
sao (*) nên bạn đã giảm thiểu lưu lượng truyền tải qua mạng (số byte) cần thiết

câu lệnh INSERT vẫn tiếp 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ộ

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ủ SQL và không có ý nghĩa gì nếu tập hợp kết quả của bạn chỉ bao
gồm những bản ghi độc nhất.
Chỉ dùng UNION khi cần
Cũng giống như trường hợp từ khóa DISTINCT, toán tử UNION đòi hỏi thêm
thao tác SORT để máy chủ SQL có thể loại bỏ những kết quả trùng lặp. Nếu bạn
biết trước danh sách kết quả trả về không có kết quả nào giống nhau thì thao tác
s
ắp xếp mà máy chủ SQL phải thực hiện trở nên không cần thiết. Bởi vậy khi
bạn cần dùng toán tử UNION để nối hai tập hợp bản ghi với nhau, trong đó các
bản ghi là độc nhất không trùng lặp, tốt hơn bạn nên dùng toán tử UNION ALL.
Toán tử UNION ALL không loại bỏ các bản ghi trùng lặp bởi vậy sẽ giảm nhẹ
phần công việc cho máy chủ SQL trong quá trình xử lý do không phải thực hiện
thao tác sắp xếp. Gi
ảm bớt công việc cho máy chủ SQL đồng nghĩa với việc thao
tác xử lý sẽ được thực hiện nhanh hơn.
Áp dụng các thói quen tốt để code nhanh hơn
Có rất nhiều lý do để tập luyện cho mình quen với lối viết code tối ưu. Khi bạn áp
dụng thành thạo những thủ thuật nhỏ nêu trên và biến nó thành thói quen mỗi khi
viết câu lệnh T-SQL, bạn sẽ tránh được rủi ro có thể xảy ra khi cơ sở dữ
liệu
thay đổi, đồng thời cải thiện hiệu suất làm việc của máy chủ nhờ giảm thiểu lưu
lượng truyền tải qua mạng. Những thủ thuật rất đơn giản này còn giúp bạn tận


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status