|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
Есть у меня две большие таблицы, с индексами все в порядке, поэтому внутренний джойн испоняется быстро и эффективно. Собирался полистать все страницы всех книжек Лема, но оказалось что некоторые страницы склеились: Код: plsql 1. 2. 3. 4.
ТЕХТ ---- page1 page2 page3,page4,page6 page5 ... Не беда, есть много способов разбить строку, сделал так: Код: plsql 1. 2. 3. 4. 5.
И тут Оракл хорошо завис (таблицы большие). Я вспомнил как джойны исполняются до предикатов, и понадеялся что смогу передвинуть предикат выше, но без видимого эффекта. Код: plsql 1. 2. 3. 4.
Почему-то думал что это намекнет Ораклу сделать быстрый джойн и фильтр, а уж потом добавить медленный джойн. Nope. Предикат что в джойне, что в where - одно и то же. Силой запихал скобками фильтр поглубже - все равно зависает. (таблицы не только длинные, а еще наполовину удаленные) Код: plsql 1. 2. 3. 4. 5.
Руками отделил быстрое от медленного: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Пришлось смотреть планы, они оказались одинаковые, т.е. Оракл над моими попытками "оптимизировать" тихо посмеялся. Думаю, как такой запрос ускорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 06:09 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
НеофитSQL Думаю, как такой запрос ускорить. Никак. Всё упёрлось в split. Просто надо сделать, чтобы в pages хранились действительно pages, а не когда pages, а когда comma-separaded хз что. В столбце должны хранится значения одного типа, а не помойка. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 06:24 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
НеофитSQL, А собственно планы где? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 09:40 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
НеофитSQL Есть у меня две большие таблицы А поточнее можно? Попробовал сымитировать - таблица книг 1E5 строк, книги "Лема" - каждая 73-я, таблица страниц - 3E7 строк, примерно по 300 "страниц" на книгу. Запятые ставились рандомно от 2 до 10 на строку. Первичный ключ на "книгах", индекс и фк на него в "страницах". Парсинг comma-separated строки делал через xmltable + ora:tokenize, общее количество итоговых страниц считается быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 14:25 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
Спасибо за ответы, я не писал про мои попытки с токенизацией через XML и regexp/level, чтобы не запутывать тему. В планах ничего необычного. За всю ночь джойн не отработал. Коллега ответил, что удаленная, бОльшая часть моих таблиц намного медленней чем местный доступ, поэтому сначала скопирую в местную таблицу. Суть моего тест-запроса выглядела так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 17:36 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
НеофитSQL, Дайте-ка угадаю, первый пример был не на полном фетче, а на выдаче первых строк? И опускать "незначительные мелочи" вроде того, что у вас там вьюхи да ещё и по линку - как минимум нелепо, если ожидаете реальной помощи. Угадывать, что издаёт стук в вашем подвале, становится гиблым делом. з.ы. Ещё немного поугадываю, без прибивания гвоздями в виде вызова функции, исходный план скорее всего выполнялся на удалённом сервере с пробросом туда "маленькой" "местной" части. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 17:49 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
env НеофитSQL, Дайте-ка угадаю, первый пример был не на полном фетче, а на выдаче первых строк? И опускать "незначительные мелочи" вроде того, что у вас там вьюхи да ещё и по линку - как минимум нелепо, если ожидаете реальной помощи. Угадывать, что издаёт стук в вашем подвале, становится гиблым делом. з.ы. Ещё немного поугадываю, без прибивания гвоздями в виде вызова функции, исходный план скорее всего выполнялся на удалённом сервере с пробросом туда "маленькой" "местной" части. Первое не угадали. Второе сейчас посмотрю.. тоже не угадали. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 18:53 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
Ошибка была в моем кустарном SplitString(), который не справился с null в 100500 строке и ушел в бесконечный цикл. После исправления все работает, и dblink не такой уж медленный. Урок: расслабился с SQL, проверять параметры надо всегда, а не только в боевом коде. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2020, 20:13 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
НеофитSQL и dblink не такой уж медленный. Он глючный и имеет свойство рандомно отваливаться. Наши парни, которые за ДБА его не любят. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 05:10 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
НеофитSQL Ошибка была в моем кустарном SplitString() Ожидаемо. Предположения по планам и фетчу были высказаны, исходя из предыдущих претензий ТС на высокое качество его процедурного кода. Вот тут точно не угадал. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 09:02 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
crutchmaster НеофитSQL и dblink не такой уж медленный. Он глючный и имеет свойство рандомно отваливаться. Наши парни, которые за ДБА его не любят. Спасибо. Если этот одноразовый отчет попросят сделать по кнопке (или другая похожая задача вовлекающая удаленную* архивную базу), я потестирую скорость/надежность и в случае проблем, закеширую нужные мне таблицы через MV с индексами. (*)удаленная условно, это другая схема на том же сервере. Возможно, она не подвержена отваливаниям из-за этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 19:18 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
Не должно быть новостью для экспертов, но мой запрос перемешивающий дальние/ближние данные не был эффективным, и отрабатывал секунд за 10. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Как только отделил мух от котлет, все стало летать в разы быстрее: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Часть, которая прибавила больше всего скорости, отмечена желтым. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 21:56 |
|
Попытки управления порядком джойнов
|
|||
---|---|---|---|
#18+
вам точно нужен UNION ALL ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2020, 22:01 |
|
|
start [/forum/topic.php?fid=52&msg=40025461&tid=1880628]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 141ms |
0 / 0 |