SQL Server 2008에 다음과 같은 인덱싱 된 뷰가 정의되어 있습니다 ( 테스트 목적으로 gist에서 작업 스키마 를 다운로드 할 수 있음 ).
CREATE VIEW dbo.balances
WITH SCHEMABINDING
AS
SELECT
user_id
, currency_id
, SUM(transaction_amount) AS balance_amount
, COUNT_BIG(*) AS transaction_count
FROM dbo.transactions
GROUP BY
user_id
, currency_id
;
GO
CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id
ON dbo.balances (
user_id
, currency_id
);
GO
user_id
, currency_id
및 transaction_amount
은 모두의 NOT NULL
열로 정의됩니다 dbo.transactions
. 그러나, 나는 관리 Studio의 개체 탐색기, 그것은 마크 모두에서 뷰 정의에서 볼 때 balance_amount
와 transaction_count
같은 NULL
뷰에서 -able 열.
몇 가지 토론을 살펴 보았습니다. 이 토론 은 가장 관련이 있습니다. 일부 함수 섞기가 SQL Server 가보기 열이 항상임을 인식하는 데 도움이 될 수 있음을 제안 NOT NULL
합니다. 그러나 집계 함수 (예 : ISNULL()
이상 SUM()
)에 대한 표현식 은 인덱싱 된 뷰에서 허용되지 않으므로 그러한 셔플 링은 가능 하지 않습니다 .
SQL 서버가 인식 내가 도울 수있는 방법이 있나요
balance_amount
하고transaction_count
있습니다NOT NULL
-able은?그렇지 않은 경우 이러한 열이 실수로
NULL
-able 로 식별되는 것에 대해 우려해야 합니까?내가 생각할 수있는 두 가지 문제는 다음과 같습니다.
- 저울보기에 매핑 된 응용 프로그램 객체가 저울의 잘못된 정의를 받고 있습니다.
- 매우 제한된 경우에,이 두 열이이라는 것을 보증하지 않기 때문에 Query Optimizer가 특정 최적화를 사용할 수 없습니다
NOT NULL
.
이러한 우려 중 하나가 큰 문제입니까? 명심해야 할 다른 문제가 있습니까?