Làm thế nào để sử dụng các lược đồ riêng biệt ảnh hưởng đến hiệu suất SQL Server 2008?


11

Tôi muốn sử dụng các lược đồ riêng cho các đối tượng với các mục đích khác nhau trong cơ sở dữ liệu SQL Server 2008 của chúng tôi. Ngay bây giờ chúng tôi sử dụng một quy ước đặt tên khá phiền phức để chỉ ra mục đích của một bảng hoặc thủ tục được lưu trữ và các tiền tố có nghĩa là chúng tôi phải quét năm hoặc sáu ký tự trước khi chúng tôi nhìn thấy bắt đầu của tên duy nhất. Tôi muốn sử dụng các lược đồ riêng cho các bảng chỉ được sử dụng để điều khiển UI (menu, vai trò theo người, v.v.) và cho các lược đồ là bảng thứ nguyên so với bảng thực tế, v.v.

Câu hỏi của tôi là, liệu sẽ có tác động hiệu suất từ ​​việc sử dụng nhiều lược đồ (lược đồ?) Đã trái ngược với dbo cũ tốt cho mọi thứ?

Câu trả lời:


4

Có thể có một tác động đến hiệu suất của trình tối ưu hóa truy vấn, mặc dù nhỏ, tùy thuộc vào phong cách mã hóa của bạn. Nếu bạn tham chiếu một bảng không có lược đồ, trình tối ưu hóa phải cố gắng xác định bảng trước bằng cách kiểm tra các bảng trong lược đồ mặc định của người dùng (nếu có), sau đó sử dụng dbo., Rồi mọi thứ khác. Nếu bạn tham chiếu rõ ràng các bảng dưới dạng lược đồ. Đây có thể là cách thực hành tốt, thì ngay cả chi phí nhỏ này cũng sẽ tránh được.


1

Không có sự khác biệt trong hiệu suất. Tuy nhiên, bạn đang sử dụng lược đồ ngay bây giờ (ngay cả khi bạn không biết).

Việc sử dụng các tham chiếu đến các đối tượng lược đồ như bảng, thủ tục được lưu trữ, UDF, v.v. không đủ tiêu chuẩn lược đồ sẽ có tác động hiệu năng. Tài liệu tham khảo phải luôn luôn đủ điều kiện theo lược đồ. Các tài liệu tham khảo không đủ tiêu chuẩn như vậy phải được giải quyết, và điều đó xảy ra như thế này:

  • Đầu tiên, hãy tìm một đối tượng có cùng tên và loại theo lược đồ mặc định của người dùng theo thông tin xác thực phiên được thiết lập (ví dụ jsmith). Nếu tìm thấy, trường hợp đó được sử dụng.
  • Mặt khác, tìm kiếm một đối tượng có cùng tên và gõ dưới lược đồ dbo.

Điều này có một số hiệu ứng:

  • Hầu hết thời gian, hai tra cứu được yêu cầu để giải quyết tham chiếu thay vì tìm kiếm đơn lẻ nếu tham chiếu đủ điều kiện lược đồ.
  • Kế hoạch thực hiện thu được khi hàm truy vấn / thủ tục lưu trữ / hàm do người dùng xác định bị ràng buộc không thể lưu trữ và sử dụng lại.

Hiệu ứng cuối cùng mà bạn sẽ chỉ tìm thấy một cách đau đớn khi gặp sự cố là khi những người dùng khác nhau có thể nhận được các kết quả khác nhau từ một truy vấn hoặc quy trình được lưu trữ nhất định. Một cái gì đó như select * from foo join barcó thể hoạt động tốt đối với tôi với tư cách là chủ sở hữu db; nó có thể bị phá vỡ đối với người dùng jsmith, vô tình hay không, đã tạo một bảng có tên footheo lược đồ riêng của mình ( jsmith.foo) trong cùng một cơ sở dữ liệu.

Vì lý do này, createvà các dropcâu lệnh nên đủ điều kiện lược đồ tên của đối tượng được tạo hoặc loại bỏ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.