Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server:Tôi có nên sử dụng bảng information_schema trên bảng sys không?

Trừ khi bạn đang viết một ứng dụng mà bạn biết thực tế là sẽ cần phải có tính di động hoặc bạn chỉ muốn có thông tin khá cơ bản, tôi sẽ chỉ mặc định sử dụng chế độ xem hệ thống SQL Server độc quyền để bắt đầu.

Information_Schema chế độ xem chỉ hiển thị các đối tượng tương thích với tiêu chuẩn SQL-92. Điều này có nghĩa là không có chế độ xem lược đồ thông tin cho các cấu trúc thậm chí khá cơ bản như chỉ mục (Chúng không được định nghĩa trong tiêu chuẩn và được để lại dưới dạng chi tiết triển khai.) Hãy để một mình bất kỳ tính năng độc quyền nào của SQL Server.

Ngoài ra, nó không hoàn toàn là liều thuốc chữa bách bệnh cho tính di động mà người ta có thể cho là. Việc triển khai vẫn khác nhau giữa các hệ thống. Oracle hoàn toàn không triển khai nó "out of the box" và tài liệu MySql cho biết:

Người dùng SQL Server 2000 (cũng tuân theo tiêu chuẩn) có thể nhận thấy sự tương đồng mạnh mẽ. Tuy nhiên, MySQL đã bỏ qua nhiều cột không liên quan đến việc triển khai của chúng tôi và thêm các cột dành riêng cho MySQL. Một trong những cột như vậy là cột ENGINE trong bảngINFORMATION_SCHEMA.TABLES.

Ngay cả đối với các cấu trúc SQL bread and butter chẳng hạn như các ràng buộc khóa ngoại thì Information_Schema chế độ xem có thể kém hiệu quả hơn đáng kể so với sys. xem vì chúng không hiển thị id đối tượng sẽ cho phép truy vấn hiệu quả.

ví dụ. Xem câu hỏi Truy vấn SQL chậm từ 1 giây đến 11 phút - tại sao? và kế hoạch thực hiện.

INFORMATION_SCHEMA

hệ thống



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Tạo một dạng xem

  2. Hàng được phân tách bằng dấu phẩy trong SQL với mệnh đề Group By

  3. Các ký tự thoát khỏi tìm kiếm toàn văn bản trong SQL Server?

  4. Điều gì xảy ra nếu bạn không thực hiện một giao dịch với cơ sở dữ liệu (chẳng hạn như SQL Server)?

  5. Sử dụng IDENT_CURRENT () để trả lại giá trị nhận dạng hiện tại trên cột nhận dạng trong SQL Server