Các cột vô hiệu trong cơ sở dữ liệu đôi khi có thể dẫn đến các vấn đề về hiệu suất. Điều đó chắc chắn không có nghĩa là các cột có thể vô hiệu sẽ luôn gây ra các vấn đề về hiệu suất, nhưng nếu bạn tình cờ gặp vấn đề về hiệu suất, việc xác định các cột có thể không có khả năng cung cấp một số manh mối về vị trí của vấn đề. Đôi khi tạo một cột NOT NULL
có thể giúp cải thiện hiệu suất.
Ý tôi là "cột nullable", các cột cho phép NULL. Nếu định nghĩa của cột không bao gồm NOT NULL
, thì nó cho phép các giá trị NULL và nó là "nullable".
Dưới đây là mã cho phép bạn liệt kê tất cả các cột có thể vô hiệu hóa trong cơ sở dữ liệu trong SQL Server.
Ví dụ 1 - INFORMATION_SCHEMA.COLUMNS
Dạng xem lược đồ thông tin này liệt kê tất cả các cột có thể được truy cập bởi người dùng hiện tại trong cơ sở dữ liệu hiện tại. Nó có một cột được gọi là IS_NULLABLE
. Nếu cột có liên quan cho phép NULL, cột này trả về
CÓ
. Nếu không,
KHÔNG
được trả lại.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES';
Điều này liệt kê tất cả các cột từ chế độ xem.
Ví dụ 2 - INFORMATION_SCHEMA.COLUMNS với ít cột được chỉ định hơn
Bạn có thể không muốn tất cả các cột được trả về từ dạng xem. Dưới đây là một ví dụ với ít cột được trả về hơn.
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE IS_NULLABLE = 'YES' ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;
Ví dụ 3 - Sử dụng sys.columns
Nếu bạn không muốn sử dụng INFORMATION_SCHEMA.COLUMNS
xem, sau đó bạn có thể truy vấn sys.columns
xem thay thế.
Tuy nhiên, bạn sẽ cần thực hiện một số phép nối nếu bạn muốn trả về các bảng và / hoặc lược đồ, v.v.
Ví dụ:
SELECT SCHEMA_NAME(t.schema_id) AS [Schema], t.name AS [Table], c.name AS [Column], dc.definition AS [Column Default], ty.name AS [Data Type] FROM sys.tables AS t INNER JOIN sys.columns AS c ON t.object_id = c.object_id LEFT JOIN sys.types AS ty ON c.user_type_id = ty.user_type_id LEFT JOIN sys.default_constraints dc ON c.default_object_id = dc.object_id WHERE c.is_nullable = 1 ORDER BY [Schema], [Table], [Column];