Как и в случае с вопросами оптимизатора, ответ: это зависит. Я бы сказал, что во многих ситуациях быстрее во всех случаях, но есть случаи, когда subselect быстрее.
Оптимизаторы обычно не документируются каждой деталью поставщиками (даже если некоторые из них более документированы, чем другие, а Analysis Services - типичный пример движка с менее документированным оптимизатором). Я бы подумал, что в их коде есть много правил, например «если это и это, но не третье условие, тогда идите по этому пути». И это постоянно меняется, поэтому любая документация будет устаревать с более или менее каждым исправлением.
Как уже говорилось, ситуация для многих реляционных движков немного лучше, где для SQL Server вы можете, по крайней мере, показать план, который более или менее понятен. Но даже там вы не знаете, почему именно оптимизатор выбрал этот план, а не другой, и иногда приходится пробовать несколько подходов, чтобы оптимизировать на другом пути (например, с помощью индекса ...). И новый выпуск SQL Server может обрабатывать вещи по-другому, надеюсь, лучше в большинстве случаев, но, возможно, хуже в нескольких редких случаях.
Это явно не ясный и документированный способ написания кода, а просто проб и ошибок.
Подводя итог: Вам придется протестировать свой куб и ваши типичные запросы.
В любом случае разница в производительности настолько мала, что это не имеет отношения к делу.
И, наконец, лучшая документация, доступная для оптимизатора служб Analysis Services, представляет собой старый блог одного из разработчиков механизма запросов служб Analysis Services по адресу http://sqlblog.com/blogs/mosha/default.aspx. Это блог, это не очень систематический, а просто набор некоторых случайных образцов поведения оптимизатора с причинами этого.
С подзапросом вы можете добавить 'foo .bar.' в строки или столбцы, но с помощью slicer это невозможно. Из краткого чтения, которое я сделал, кажется, что подвыборки очень хороши, если вы хотите поиграть с визуальными итогами, например. в вашем первом скрипте ВСЕ член 'foo.bar.' теперь будет таким же, как и сумма для' foo.bar. & [Val] '. Сначала выполняется подзаголовок и уменьшает пространство в кубе, поэтому я предполагаю, что есть некоторый прирост производительности, особенно если внешний запрос сложный. Выделили (и + 1'd) свой вопрос Сурав как заинтересованный, чтобы увидеть ответ. – whytheq
Да, подзапросы (или подзапросы) имеют гораздо больше возможностей с точки зрения гибкости. Но именно поэтому я хочу знать, есть ли у них более темная сторона? Если нет, я предпочел бы ВСЕГДА идти за ними, учитывая, что они дают больше возможностей. – SouravA