Секционированное представление: использование CHECK CONSTRAINT - PullRequest
1 голос
/ 04 января 2012

Чтобы хранить огромное количество данных в базе данных SQL Server 2008 R2 Express, я разделяю данные на несколько баз данных, создавая новый «раздел» для каждого месяца.

В этом посте: http://msdn.microsoft.com/en-us/library/ms190019.aspx показано, как помочь оптимизатору запросов быстрее находить данные среди моих разделов.

Однако при запросе данных в моем представлении между датами, которые соответствуют только пустому разделу, план запроса показывает, что он ищет среди всех разделов. Хотя я не могу понять, почему.

Мой взгляд очень прост:

SELECT A.Gohan, B.Goku
FROM [Feb2011].[dbo].[A]
LEFT OUTER JOIN [Feb2011].[dbo].[B]
UNION ALL
SELECT A.Gohan, B.Goku
FROM [Mar2011].[dbo].[A]
LEFT OUTER JOIN [Mar2011].[dbo].[B]
UNION ALL
...

Любая подсказка?

Ответы [ 2 ]

1 голос
/ 04 января 2012

Секционированные представления не поддерживаются в выпуске SQL Server Express.

Проверка Функции SQL Server, не поддерживаемые в SQL Server Express раздела Функции SQL Server Express на MSDN.

1 голос
/ 04 января 2012

Это потому, что это не настоящие разделы. Если вы строите индекс для каждой таблицы базы данных на основе даты, он проверит этот индекс и быстро вернет 0 строк. Если бы это было действительно разделено, то вы бы получили поведение, которое вы ожидаете. Но это не так, поэтому он проверит каждую таблицу в операторе union, чтобы вернуть пустой набор результатов.

Пока план запроса показывает seek, а не scan, я бы не стал беспокоиться об этом, поскольку seeks довольно быстр. В зависимости от scan, однако, вы можете быть в порядке (это не черно-белое правило).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...