2017-01-25 1 views
2

У меня есть следующий вид на разделы: vwSalesOutH. Он состоит из нескольких таблиц с именем «SalesOutH» в разных базах данных.Фильтровать по разделам Фильтр не работает

Когда я использую следующий запрос, он отлично работает, поиск по одной таблице vwSalesOutH:

select vwSalesOutH.* 
from vwSalesOutH 
inner join DatesImport on vwSalesOutH.DBTypeId=DatesImport.DBTypeId and 
          vwSalesOutH.CustId=DatesImport.CustId 
where vwSalesOutH.DBTypeId=2 and 
vwSalesOutH.Date>='2017-01-01 00:00:00' and 
vwSalesOutH.Date<='2017-01-25 00:00:00'; 

Статистика IO:

(6179 row(s) affected) 
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 1, logical reads 452, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'DatesImport'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

Когда я использую следующий запрос, в котором в блоке «где» использовались одни и те же даты, у меня проблема: поиск осуществляется по всем таблицам в виде секций:

select vwSalesOutH.* 
from vwSalesOutH 
inner join DatesImport on vwSalesOutH.DBTypeId=DatesImport.DBTypeId and 
          vwSalesOutH.CustId=DatesImport.CustId 
where vwSalesOutH.DBTypeId=2 and 
vwSalesOutH.Date>=DatesImport.Fact_Start and 
vwSalesOutH.Date<=DatesImport.Fact_End; 

Статистика IO:

(6179 row(s) affected) 
Table 'DatesImport'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Workfile'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 452, physical reads 0, read-ahead reads 43, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 584, physical reads 0, read-ahead reads 1, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 55717, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 12752, physical reads 0, read-ahead reads 3, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 11834, physical reads 0, read-ahead reads 8, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 11097, physical reads 0, read-ahead reads 10, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'SalesOutH'. Scan count 5, logical reads 51, physical reads 0, read-ahead reads 13, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

Не могли бы вы дать мне советы, чтобы исправить второй запрос?

+0

Попробуйте вставить планы выполнения на http://PasteThePlan.com. (Отказ от ответственности: это сайт моей компании.) –

ответ

1

Я столкнулся с той же проблемой, проблема заключается в том, что если значение секционирования не указано как константа (не объединено, а не переменная), то оптимизатор не может идентифицировать используемый раздел и вместо этого сканирует все таблицы

Даже при использовании опции (перекомпилировать) фильтрация по объединенным столбцам не переходит в одиночный поиск таблицы.

Использование переменной с опцией (перекомпиляция) относится к поиску одиночной таблицы.