Разделенный вид: использование КОНТРАКТА ПРОВЕРКИ

Чтобы хранить огромный объем данных в базе данных 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 ответа

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

Проверьте функции SQL Server, которые не поддерживаются в разделе SQL Server Express на странице функций SQL Server Express на MSDN.


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

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

licensed under cc by-sa 3.0 with attribution.