|
|
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Преамбула Был запрос следующей структуры: Код: plsql 1. 2. 3. 4. 5. 6. 7. план: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Можете на лефт джойны переписать в данном случае ничего не меняется... соединяемые поля индексированы и там и там... Таблиц соединенных может быть много и все соединены через (+) и у всех используется на вывод по одному полю... Без меня переписали следующем образом (был в ахуе от реализации, но перед тем как вести разборки проверил загрузку и план...) Вариант как стало... Код: plsql 1. 2. 3. 4. 5. план: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Cost стал меньше, байты тоже... в ASH нагрузка стала меньше... в разы... Всегда ранее старался смотреть на соединение внизу... а не в выводе полей считая, что это лишние и лишнее... Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production PL/SQL Release 11.2.0.3.0 - Production CORE 11.2.0.3.0 Production TNS for Linux: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Production ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 13:36:06 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Очумелый кроликнагрузка стала меньше... в разы...Не верю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 13:41:30 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
ElicОчумелый кроликнагрузка стала меньше... в разы...Не верю. потому что знаю количество строк в e и распределение значений для пары (e.status, e.agnlist_rn) в его случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 13:50:24 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
boobyпотому что знаюдва скаляра не должны быть эффективнее join-a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 13:55:48 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
при малом значении Код: plsql 1. 2. 3. кэширование скаляров может быть интереснее явного соединения. кроме того, отдельно, целесообразность индекса на e.status должна быть доказуема в конкретном случае. Но пока эта не та история, которая удивляет топикстартера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:10:20 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
booby, Хорошо... Вариант с полным списком: Код: plsql 1. 2. 3. 4. 5. план: ----------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ----------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 13671 | 1640520 | 1247 | 00:00:15 | | * 1 | HASH JOIN OUTER | | 13671 | 1640520 | 1247 | 00:00:15 | | 2 | TABLE ACCESS FULL | EMPLIST | 13671 | 1203048 | 68 | 00:00:01 | | 3 | TABLE ACCESS FULL | AGNLIST | 146049 | 4673568 | 1178 | 00:00:15 | ----------------------------------------------------------------------------- и Код: plsql 1. 2. 3. план ---------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 13671 | 1203048 | 68 | 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID | AGNLIST | 1 | 32 | 2 | 00:00:01 | | * 2 | INDEX UNIQUE SCAN | AGNLIST_PK | 1 | | 1 | 00:00:01 | | 3 | TABLE ACCESS FULL | EMPLIST | 13671 | 1203048 | 68 | 00:00:01 | ---------------------------------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:11:57 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
booby, что бы исключить статистические знания по количеству отбора строк в таблице E 1 вариант Код: plsql 1. 2. 3. 4. 5. 6. план: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. и второй вариант: Код: plsql 1. 2. 3. 4. план: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:17:20 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Очумелый кролик, хорошего здесь только то, что становится понятны размеры таблиц в штуках строк. какого рода пояснений вы ждете к последним двум планам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:20:11 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Elic, Согласен... и говорю же что собирался устроить разборку, но начал проверять так как не люблю рубить с плеча... и теперь я в таймауте и думаю почему! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:23:49 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
boobyОчумелый кролик, хорошего здесь только то, что становится понятны размеры таблиц в штуках строк. какого рода пояснений вы ждете к последним двум планам? то было два предпоследние. а в последних что вас интересует? попробуйте задать вопрос. отвечать на мнение сорта "всегда думал" затруднительно, способом отличным от "иногда думай иначе". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:25:39 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Просто это выбило меня с моего мировоззрения, и хочу понять, может я от чего то сильно отстал и теперь вообще все не так? Я как и Вы считал, что это должно работать медленнее... что это отдельные запросы на каждую строку и т.д. Это пример соединений в реальности основная таблица имеет около 20 миллионов записей которые отбираются по ряду условий в средней выборке которых остается в пределах 1000 записей... иногда единицы записей, иногда сотни... и есть порядка 10-15 таблиц расшифровки значений данных в основной таблице может не быть... просто не пойму почему быстрее так как сам понимаю, что быть не должно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:32:51 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Очумелый кроликПросто это выбило меня с моего мировоззрения, и хочу понять, может я от чего то сильно отстал и теперь вообще все не так? Я как и Вы считал, что это должно работать медленнее... что это отдельные запросы на каждую строку и т.д. Это пример соединений в реальности основная таблица имеет около 20 миллионов записей которые отбираются по ряду условий в средней выборке которых остается в пределах 1000 записей... иногда единицы записей, иногда сотни... и есть порядка 10-15 таблиц расшифровки значений данных в основной таблице может не быть... просто не пойму почему быстрее так как сам понимаю, что быть не должно... вы сферическими конями пытаетесь рассуждать. Правильно ли предполагать, что "основной" вы называете emplist e? авторЭто пример соединений в реальности основная таблица имеет около 20 миллионов записей которые отбираются по ряду условий в средней выборке которых остается в пределах 1000 записей... иногда единицы записей, иногда сотни... вот этот "ряд условий" разделяется на три части в общем случае - какие-то из них работают до соединения, какие-то фильтруют данный на фазе соединения, а какие-то остаются на потом - на последний фильтр после соединения. Чем больше условий оказывается на последней фазе - тем хуже вашему соединению в смысле потраченных впустую усилий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 14:41:32 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Очумелый кроликпросто не пойму почему быстрее так как сам понимаю, что быть не должно...Буби же озвучил уже мысль про кеширование скаляров. Код: plsql 1. 2. 3. 4. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В примере в три раза быстрее, если сделать доступ по rowid еще дороже, то можно воспроизвести чтоб было на порядок дольше и более. PS. В ASH есть детали куда уходит время если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:12:25 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopВ примере в три раза быстрее, если сделать доступ по rowid еще дороже, то можно воспроизвести чтоб было на порядок дольше и более.Доступ по rowid особой погоды не делает при небольшом числе distinct ключей соединения. Конкуренцию по чтению еще можно организовать чтоб были всякие buffer busy waits/read by other session. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:20:55 |
|
||
|
Интересно ваше мнение по поводу организации двух запросов
|
|||
|---|---|---|---|
|
#18+
Очумелый кролик, решил добавить пару фраз к вышесказанному. судя по характеру "подачи", у меня складывается впечатление, что вы ищете простое правило сорта - если у вас тут много, а там мало, то всегда делай соединение, а иначе всегда используй скалярный подзапрос. Я думаю, одним-двумя ифами такого правила не сформулировать в том месте, в каком, например вы планируете такое правило применить для создания универсального представления, которым клиент (в отчетах, например) будет пользоваться для реализации любой, наперед неизвестной потребности. Пусть, применив вариант Код: plsql 1. 2. 3. 4. 5. где запрос возвращает тысячу-другую строк, и вы выиграли "в разы" в значениях интересных вам чиселок. И даже все остается замечтательным при всех ранее известных вариантах фильтрации. и даже по полю aname. Может быть, что "хорошо" может почти всегда, по крайней мере до тех пор, пока клиенту не понадобится Код: plsql 1. 2. 3. 4. 5. 6. 7. Никто не может вам гарантировать, что достигнутое вами "улучшение в разы" не сменится в этот момент "ухудшением в порядки раз". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 20:25:58 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=208&tid=1887750]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
294ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 582ms |

| 0 / 0 |
