|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Добрый день! Почему в обычном запросе используется индекс, а если тоже запрос во вью будет сканировать таблицу. Если не использовать оконную функцию то все хорошо. Наверняка есть научное объяснение этому поведению? пример практического смысла не имеет, только отражает суть этого проведения. Смотрите план последних двух запросов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 18:33 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
osipen Добрый день! Почему в обычном запросе используется индекс, а если тоже запрос во вью будет сканировать таблицу. Если не использовать оконную функцию то все хорошо. Наверняка есть научное объяснение этому поведению? пример практического смысла не имеет, только отражает суть этого проведения. Смотрите план последних двух запросов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 18:34 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
osipen Наверняка есть научное объяснение этому поведению? Вы будете смеяться, но это два разных запроса, которые выдают разный результат. И вполне естественно, что для получения разных результатов нужен разный план (результат в запросе со вьюхой не получить без сканирования таблицы) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 19:22 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Ты сам то видишь разницу в результатах запроса? Глазки протри. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 19:23 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
aleks222 Ты сам то видишь разницу в результатах запроса? Глазки протри. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 19:38 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
osipen, Потому что, грубо говоря, ранжирующие и оконные функции вычисляются на результирующем наборе. Поэтому сначала row_number в представлении со всеми вытекающими, а потом уже фильтр по id = 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 20:03 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
На мой взгляд, запросы эквивалентны. Если один исполняется менее эффективно, это наверное недочёт оптимизатора. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2020, 20:05 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL, почему недочет, оптимизатор выполняет следующий запрос, как сказано ранее: Код: sql 1. 2. 3.
Мы явно его просим использовать фильтр после просмотра таблицы. Чтобы не попасть в такую ситуацию, можно использовать функцию, а не представление, т.е. параметризовать запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 00:25 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
alexeyvg osipen Наверняка есть научное объяснение этому поведению? Вы будете смеяться, но это два разных запроса, которые выдают разный результат. И вполне естественно, что для получения разных результатов нужен разный план (результат в запросе со вьюхой не получить без сканирования таблицы) Я вообще не понимаю, как у человека появляются такие вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 01:37 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL На мой взгляд, запросы эквивалентны. Если один исполняется менее эффективно, это наверное недочёт оптимизатора. Дело не во вьюхе, а в семантике запроса. Если без вьюхи сделать то же самое (Владислав Колосов привёл пример), то план будет такой же, со сканом вместо индекс сик. Focha Я вообще не понимаю, как у человека появляются такие вопросы. Похоже на задачу на собеседовании :-) Всяко лучше, чем про люки и продажу бензина :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 10:20 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Владислав Колосов НеофитSQL, почему недочет, оптимизатор выполняет следующий запрос, как сказано ранее: Код: sql 1. 2. 3.
Мы явно его просим использовать фильтр после просмотра таблицы. Чтобы не попасть в такую ситуацию, можно использовать функцию, а не представление, т.е. параметризовать запрос. Я не у компа сейчас чтобы проверить этот конкретный случай, но из моего (не слишком богатого) опыта помню, что оптимизатор оракла в таких случаях раскрывает скобки и переносит условие во внутренний запрос, после чего внешний пропадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 18:33 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Теперь у компа, проверил. Я ошибался в чтении этих запросов. Используя пример из сообщения г. Колосова, я построил три запроса: Код: sql 1. 2. 3.
Они дают три разных результата. Почему это так, я пока не разбирался, на выходных надо отдыхать. Если знающий народ не поможет с объяснением которое понятно новичкам, я разберусь в понедельник и разложу по полочкам. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2020, 22:19 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Вот здесь SomewhereSomehow всё по полочкам разложил. В т.ч. про проталкивание предикатов. В оракле, кстати, в запросах с оконными функциями примерно та же самая картина - в случаях, подобных вышеописанному, оптимизатор протолкнуть предикаты не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 04:47 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Вот здесь SomewhereSomehow всё по полочкам разложил. В т.ч. про проталкивание предикатов. В оракле, кстати, в запросах с оконными функциями примерно та же самая картина - в случаях, подобных вышеописанному, оптимизатор протолкнуть предикаты не может. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 08:41 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
andreymx Сон Веры Павловны Вот здесь SomewhereSomehow всё по полочкам разложил. В т.ч. про проталкивание предикатов. В оракле, кстати, в запросах с оконными функциями примерно та же самая картина - в случаях, подобных вышеописанному, оптимизатор протолкнуть предикаты не может. Точно, не должен. Смысл разный. Да, там все хорошо и подробно человек написал. Я с утра посмотрел на ранее написанные три запроса, исправил опечатки, и понял следующее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Все по правилам SQL, как и должно быть. Плюсую ссылку: здесь SomewhereSomehow всё по полочкам разложил. Вопрос для виртуозов SQL - а можно ли как-то переписать эту вьюху, чтобы удалось протолкнуть в нее параметр, чтобы действительно Код: sql 1.
исполнялось как Код: sql 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:17 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL, по-моему, в общем случае это извращение вставлять в представление distinct, union без all, аналитику, сортировку (в оракле можно) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:36 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
andreymx, Я раньше не задумывался про это, т.к. не использовал аналитику во вьюхах (и не знал о препятствиях в ее использовании). Промер ТС открыл глаза, можно сказать. При отсутствии аналитических функций, оптимизатор (в моем случае, Оракла) понимает что можно протолкнуть предикат, и план получается эффективным: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:53 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
andreymx НеофитSQL, по-моему, в общем случае это извращение вставлять в представление distinct, union без all, аналитику, сортировку (в оракле можно) С аналитикой понятно - эта тема иллюстрирует грабли. С сортировкой тоже понятно - да и SQL запрещает/игнорирует сортировку в представлениях. С distinct я вроде догадываюсь - эту операцию нужно применять в конце, а представление по определению является подзапросом, поэтому может появиться второй distinct. А какие проблемы с union в представлениях? Из-за промежуточной сортировки, которую можно избежать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 13:59 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
andreymx НеофитSQL, по-моему, в общем случае это извращение вставлять в представление distinct, union без all, аналитику, сортировку (в оракле можно) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 15:17 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL А какие проблемы с union в представлениях? НеофитSQL С distinct я вроде догадываюсь Осталось совместить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:09 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL, Откройте для себя сайты типа dbfiddle для проверки гипотез по sql server. Примеры с планами из оракла в этой ветке не особо котируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 16:16 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
iap andreymx НеофитSQL, по-моему, в общем случае это извращение вставлять в представление distinct, union без all, аналитику, сортировку (в оракле можно) Через Топ 100%? Так вроде ж не работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 18:34 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL Через Топ 100%? Так вроде ж не работает? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Ссылка на fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:05 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
Щукина Анна, Прикольно, но насколько мне известно для работы такое непригодно. Сортировка во внутреннем селекте официально не поддерживается кроме пары исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:51 |
|
Не учитывается предикат во вью при использовании оконных функций
|
|||
---|---|---|---|
#18+
НеофитSQL Щукина Анна, Прикольно, но насколько мне известно для работы такое непригодно. Сортировка во внутреннем селекте официально не поддерживается кроме пары исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2020, 19:56 |
|
|
start [/forum/search_topic.php?author=JuniorAI&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 443ms |
total: | 628ms |
0 / 0 |