Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1).
Số trang: 8
Loại file: pdf
Dung lượng: 144.02 KB
Lượt xem: 13
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1).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 TSQL. 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. ...
Nội dung trích xuất từ tài liệu:
Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1).Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1)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 quantrọ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ệcnhiề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ốtnê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âutruy 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 SELECTSELECT * 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óiquen 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 ghirõ 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áchchỉ 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ôngviệ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 quamạng (số byte) cần thiết để gửi các dữ liệu liên quan đến câu lệnh SELECT tới ứng dụng.Trong trường hợp bạn dùng dấu sao (*) và có một ai đó thêm cột mới vào bảng, ứng dụngcủa bạn sẽ bắt đầu tiếp nhận dữ liệu cho cột này mà không thay đổi mã nguồn ứng dụng.Nếu ứng dụng của bạn chờ đợi số lượng cột nhất định được trả về, nó sẽ bị lỗi ngay khicó người bổ sung cột mới vào một trong các bảng tham chiếu. Bằng việc khai báo rõ ràngtên từng cột trong câu lệnh SELECT, ứng dụng sẽ luôn nhận được số lượng cố định cáccột trả về, ngay cả khi có người thêm cột mới vào các bảng tham chiếu trong câu lệnhSELECT. Nhờ vậy, bạn đã giúp ứng dụng tránh khỏi những nguy cơ tiềm tàng liên quanđến các thay đổi cơ sở dữ liệu có thể xảy đến với bất kỳ bảng nào bạn tham chiếu tớitrong câu lệnh SELECT.Ghi rõ tên cột trong câu lệnh INSERTCũng giống như trên, bạn nên chỉ rõ tên từng cột bạn muốn chèn dữ liệu vào trong câulệnh INSERT. Đừng viết câu lệnh INSERT như sau:INSERT INTO MyTable VALUES (A,B,C);Khi bạn viết kiểu này, máy chủ SQL đòi hỏi chỉ đúng ba cột được định nghĩa trong bảngMyTable, và giá trị “A” sẽ được chèn vào cột đầu tiên, “B” vào cột thứ hai, “C” vào cộtcuối. Nếu ai đó thêm mới một cột vào bảng MyTable, ứng dụng của bạn sẽ bị lỗi:Msg 213, Level 16, State 1, Line 1Column name or number of supplied values does not match table definition.(Tên cột hoặc số lượng giá trị không khớp với bảng)Vì thế, thay vì viết câu lệnh INSERT như trên, bạn nên viết như sau:INSERT INTO MyTable(So1, So2, So3) VALUES (A,B,C);Bằng cách viết trên, khi ai đó thêm mới một cột tên là “So4” vào bảng MyTable, câu lệnhINSERT 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 địnhDEFAULT hoặc cho phép NULL.Thêm tiền tố cho wildcard để tăng tốc tìm kiếmSử 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ộtLastName. Nếu bạn viết câu lệnh tìm kiếm như sau:SELECT Distinct LastNameFROM Person.ContactWHERE LastName LIKE %senCâu lệnh sử dụng ký tự phần trăm (%) để thay thế cho không hoặc nhiều ký tự được theosau bởi chuỗi “sen” trong trường LastName. Điều này khiến máy chủ SQL thực hiện thaotá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 truyvấ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ủ SQLkhô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úcbằng “sen”, bạn có thể viết câu lệnh tìm kiếm như sau:SELECT Distinct LastNameFROM Person.ContactWHERE 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àytươ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ầnnữ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ấytấ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 ...
Nội dung trích xuất từ tài liệu:
Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1).Những thói quen tốt khi viết câu lệnh T-SQL (Phần 1)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 quantrọ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ệcnhiề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ốtnê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âutruy 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 SELECTSELECT * 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óiquen 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 ghirõ 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áchchỉ 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ôngviệ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 quamạng (số byte) cần thiết để gửi các dữ liệu liên quan đến câu lệnh SELECT tới ứng dụng.Trong trường hợp bạn dùng dấu sao (*) và có một ai đó thêm cột mới vào bảng, ứng dụngcủa bạn sẽ bắt đầu tiếp nhận dữ liệu cho cột này mà không thay đổi mã nguồn ứng dụng.Nếu ứng dụng của bạn chờ đợi số lượng cột nhất định được trả về, nó sẽ bị lỗi ngay khicó người bổ sung cột mới vào một trong các bảng tham chiếu. Bằng việc khai báo rõ ràngtên từng cột trong câu lệnh SELECT, ứng dụng sẽ luôn nhận được số lượng cố định cáccột trả về, ngay cả khi có người thêm cột mới vào các bảng tham chiếu trong câu lệnhSELECT. Nhờ vậy, bạn đã giúp ứng dụng tránh khỏi những nguy cơ tiềm tàng liên quanđến các thay đổi cơ sở dữ liệu có thể xảy đến với bất kỳ bảng nào bạn tham chiếu tớitrong câu lệnh SELECT.Ghi rõ tên cột trong câu lệnh INSERTCũng giống như trên, bạn nên chỉ rõ tên từng cột bạn muốn chèn dữ liệu vào trong câulệnh INSERT. Đừng viết câu lệnh INSERT như sau:INSERT INTO MyTable VALUES (A,B,C);Khi bạn viết kiểu này, máy chủ SQL đòi hỏi chỉ đúng ba cột được định nghĩa trong bảngMyTable, và giá trị “A” sẽ được chèn vào cột đầu tiên, “B” vào cột thứ hai, “C” vào cộtcuối. Nếu ai đó thêm mới một cột vào bảng MyTable, ứng dụng của bạn sẽ bị lỗi:Msg 213, Level 16, State 1, Line 1Column name or number of supplied values does not match table definition.(Tên cột hoặc số lượng giá trị không khớp với bảng)Vì thế, thay vì viết câu lệnh INSERT như trên, bạn nên viết như sau:INSERT INTO MyTable(So1, So2, So3) VALUES (A,B,C);Bằng cách viết trên, khi ai đó thêm mới một cột tên là “So4” vào bảng MyTable, câu lệnhINSERT 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 địnhDEFAULT hoặc cho phép NULL.Thêm tiền tố cho wildcard để tăng tốc tìm kiếmSử 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ộtLastName. Nếu bạn viết câu lệnh tìm kiếm như sau:SELECT Distinct LastNameFROM Person.ContactWHERE LastName LIKE %senCâu lệnh sử dụng ký tự phần trăm (%) để thay thế cho không hoặc nhiều ký tự được theosau bởi chuỗi “sen” trong trường LastName. Điều này khiến máy chủ SQL thực hiện thaotá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 truyvấ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ủ SQLkhô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úcbằng “sen”, bạn có thể viết câu lệnh tìm kiếm như sau:SELECT Distinct LastNameFROM Person.ContactWHERE 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àytươ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ầnnữ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ấytấ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 ...
Tìm kiếm theo từ khóa liên quan:
câu lệnh T-SQL SQL xử lý quản trị web cơ sở dữ liệu xử lý truy vấn cải thiện hiệu suất.Gợi ý tài liệu liên quan:
-
62 trang 401 3 0
-
Đề thi kết thúc học phần học kì 2 môn Cơ sở dữ liệu năm 2019-2020 có đáp án - Trường ĐH Đồng Tháp
5 trang 378 6 0 -
Giáo trình Cơ sở dữ liệu: Phần 2 - TS. Nguyễn Hoàng Sơn
158 trang 292 0 0 -
13 trang 292 0 0
-
Phân tích thiết kế hệ thống - Biểu đồ trạng thái
20 trang 285 0 0 -
Tài liệu học tập Tin học văn phòng: Phần 2 - Vũ Thu Uyên
85 trang 255 1 0 -
Đề cương chi tiết học phần Quản trị cơ sở dữ liệu (Database Management Systems - DBMS)
14 trang 244 0 0 -
8 trang 186 0 0
-
Giáo trình về dữ liệu và các mô hình cơ sở dữ liệu
62 trang 183 0 0 -
Giáo trình Cơ sở dữ liệu: Phần 2 - Đại học Kinh tế TP. HCM
115 trang 175 0 0