- vừa được xem lúc

Có nên đặt tên Stored Procedure (trong SQL Server) bắt đầu bằng tiền tố "_sp" không?

0 0 1

Người đăng: Thang Le

Theo Viblo Asia

Câu hỏi này xuất phát từ một người đồng nghiệp trên công ty của mình. Thật ra hỏi vậy xong bạn ấy trả lời luôn, rằng việc đặt tiền tố như vậy là không nên. Vì nó ảnh hưởng đến hiệu suất. Mình cũng khá bất ngờ nhưng sau một hồi chuyện trò, nghe các lý luận cũng như bằng chứng từ bạn ấy, mình đã tin hơn =))) Và đó là lý do mình viết post này.

Lý do đầu tiên là:

Trùng tên với sp hệ thống

Đây là đồ của Microsoft vậy câu hỏi đặt ra, tài liệu chính thức Microsoft có cái nào đề cập tới chuyện này không?

Câu trả lời là có.

Họ nói rất ngắn gọn, đại ý - đặt tên với prefix như rứa là không hiệu quả vì có thể gây ra nguy cơ trùng tên dẫn đến lỗi.

Avoid the use of the sp_ prefix when naming procedures. This prefix is used by SQL Server to designate system procedures. Using the prefix can cause application code to break if there is a system procedure with the same name. CREATE PROCEDURE (Transact-SQL) - Procedure Name.

Thật ra sp_ trong SQL Server nó còn mang nghĩa là system procedures, hoặc special procedures, đại ý chỉ rằng đây là các procedures đặc biệt của hệ thống, và khi đặt tên với tiền tố này, nghĩa là bạn đang gia tăng tỉ lệ đặt trùng tên với stored procedure đã có của hệ thống! Điều gì xảy ra khi bạn thật sự đặt tên trùng nhỉ?

Nghe cũng chưa căng lắm phải không, vậy cái lý do tiếp theo chắc chắn sẽ khiến nó căng tròn lên. Đó là lý do liên quan đến hiệu suất!

Ảnh hưởng tới hiệu suất

Vậy nếu bạn vẫn cố tình đặt tên sp với tiền tố trên thì như thế nào? Giả sử bạn đã tạo một sp tên như sau: sp_mystoredprocedure. Lúc bạn vừa execute sp này thì SQL Server sẽ nghĩ rằng, à nó mang tiền tố sp_ nghĩa là mình cần đi quét trong database master trước đã! Nhưng khi quét trong đó thì làm gì có một cái sp nào của hệ thống mang tên đó đâu! Chính vì vậy việc tiếp theo mà nó làm là mới đi tìm sp đó trong database của bạn. Bạn thấy vấn đề chưa?

Để mình liệt kê các bước nó theo top-down cho dễ nhìn nhé.

  1. Bạn execute sp.
  2. SQL server dừng xử lý trên database của bạn.
  3. Chuyển sang master database tìm.
  4. Tìm tìm sp trong master database.
  5. Không có, nên back lại database của bạn.
  6. À tìm thấy rồi, thì ra ở đây.
  7. Thực sự execute sp.

Nếu bạn nghĩ chừng đó step không đáng kể thì hãy nghĩ rằng, một dự án trong thực tế số lượng sp không phải ít, và cứ sp nào cũng đặt trên như vậy + thêm nhiều request truy vấn (hàng triệu request) thì sẽ như thế nào.

Trường hợp nào được xài?

Không phải hoàn toàn không được xài, mà sẽ có ngoại lệ, ví dụ khi bạn có một sp và nó giống nhau ở tất cả database, thì việc tạo một sp lặp đi lặp lại trên mỗi database khá mệt... Nên lúc này tạo sp này trong master database là điều dễ hơn, nên lúc này đặt tên có tiền tố như vậy là hợp lý.

Bonus bằng chứng

Vậy cái bằng chứng mà bạn mình show ở đâu? Thật ra chỉ cần search trên google là mình thấy cái vấn đề này đã được người ta bàn luận rồi, vấn đề chỉ là mình có để ý để đi tìm mấy vấn đề này không thôi!

Bài viết này ở đây Is the sp_ prefix still a no-no?. Một bài viết rất lâu đời từ năm 2012 và mình thấy nó vẫn còn hữu ích đến ngày nay.

Vậy đặt tên gì cho chuẩn?

Chúng ta có thể dùng cách đặt trên theo kiểu Verb_Object (như ngữ pháp tiếng anh ha). Ví dụ Find_PurchasedInvoice, Create_VipCustomer.

Bạn tham khảo thêm bài viết Naming Conventions for SQL Server Objects

Bài gốc

Mình viết lại chứ bài này mình viết trên blog của mình rồi, 5s quảng cáo (blo mình lâu rồi không viết) Zang hồ đồn không nên đặt tên Stored Procedure bắt đầu bằng tiền tố sp_ trong SQL Server?

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hướng dẫn sửa lỗi không cài được SQL Server

Hôm qua do yêu cầu môn học, mình có cài lại Microsoft SQL Server. Trước đó mình có cài rồi, nhưng rồi lâu không dùng nên gỡ ra cho nhẹ máy. Bây giờ có dịp cần nên mình mới cài lại. Chi tiết lỗi mình gặp phải.

0 0 142

- vừa được xem lúc

Cách dowload và cài đặt SQL Server

Microsoft SQL Server là gì. SQL Server được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ cùng lúc cho hàng ngàn use

0 0 52

- vừa được xem lúc

Sự khác biệt giữa Stored Procedure và Function trong SQL Server

1. Giới thiệu. . Cả stored procedure và function đều là các đối tượng cơ sở dữ liệu chứa một tập các câu lệnh SQL để hoàn thành một tác vụ.

0 0 119

- vừa được xem lúc

Note for ACID properties

ACID Transactions. What is transaction. Example: Bank Transfer. .

0 0 42

- vừa được xem lúc

Thiết kế partition sai, hệ thống Core banking bị treo CPU 99% và tôi đã xử lý bằng chấm nhẹ như thế nào?

Lần đầu tiên tối ưu Core banking của tôi đó là nhiệm vụ tối ưu Cơ sở dữ liệu Core banking sử dụng phần mềm ORACLE FLEXCUBE của ngân hàng X (kỷ niệm rất đẹp nhưng mục tiêu của b

0 0 36

- vừa được xem lúc

1 triệu bản ghi VARCHAR2(400) và VARCHAR2(2) có hiệu năng khác biệt ra sao - Thay đổi thứ tự các bảng khi JOIN có ảnh hưởng hiệu năng không?

Tại bài này, tôi sẽ giúp các bạn giải quyết "một lần và mãi mãi" những hiểu lầm kinh điển sau. .

0 0 51