Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
Товарищи, вопрос пожалуй задавался уже неоднократно, но найти ответа я не могу: насколько эффективны подзапросы в PostgreSQL? Например, есть такой запрос: SELECT * FROM t1 WHERE id1 IN (SELECT id1 FROM t2 WHERE id2 IN (SELECT id3 FROM t3))); Вложенные подзапросы будут выполняться для каждой строки в таблице t1 (а последний еще и для каждой строки в таблице t2)? Или же они выполнятся однократно, и потом для каждой строки будут использоваться одни и те же результаты? И вообще, что эффективней использовать: подзапросы или JOIN'ы? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 17:00 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
надо смотреть план выполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 18:11 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
uniqusВложенные подзапросы будут выполняться для каждой строки в таблице t1 (а последний еще и для каждой строки в таблице t2)? Или же они выполнятся однократно, и потом для каждой строки будут использоваться одни и те же результаты? И вообще, что эффективней использовать: подзапросы или JOIN'ы? 1. по моему - для каждой. (можно помудрить на тему замену позапросов STABLE функциями. по крайней мере по описанию смысла модификатора STABLE - должно выполняться один раз на стейтмент). 2. JOIN-ы видимо предпочтительнее. Но бывают особости. В том числе - особенности оптимизаторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 18:45 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
angroнадо смотреть план выполнения Я не совсем разбираюсь в этом, точнее сказать, совсем не разбираюсь =D Но вот что я получил эксплейном: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 19:33 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
Или вот еще один вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 19:36 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
assa1. по моему - для каждой. (можно помудрить на тему замену позапросов STABLE функциями. по крайней мере по описанию смысла модификатора STABLE - должно выполняться один раз на стейтмент). 2. JOIN-ы видимо предпочтительнее. Но бывают особости. В том числе - особенности оптимизаторов. Спасибо, посмотрю, что дас STABLE. Только там еще есть модификатор IMMUTABLE, я так и не понял, какой же все-таки что из них делает, и как они различаются. По всей видимости, надо прокачивать скилл "знание английского" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 19:39 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
У тебя очень мало строк в этих таблицах, при большем количестве строк план выполнения запроса может кардинально поменяться. Я б рекомендовал проводить тест с минимум в 1000 строк в каждой таблице. Или я ошибаюсь, і в тех таблицах так и будет постоянно 1-3 записи? Тогда можно абсолютно не беспокоиться о производительности запросов, которые обрабатывают 3-5 строк. _____________________________________ Sorry for my Russian, if it is not OK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2007, 20:37 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
tkopetsИли я ошибаюсь, і в тех таблицах так и будет постоянно 1-3 записи? Нет, строк действительно будет порядка 800-1000. Наверное, таки попробую заполнить таблицы и погонять все три запроса. Спасибо за ответ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 00:09 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
uniqus tkopetsИли я ошибаюсь, і в тех таблицах так и будет постоянно 1-3 записи? Нет, строк действительно будет порядка 800-1000. Наверное, таки попробую заполнить таблицы и погонять все три запроса. Спасибо за ответ :) 1000 строк :) Ну это несколько 8kb блоков... Я бы даже не заморачивался с оптимизацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 00:19 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
Thamerlan[quot uniqus][quot tkopets]1000 строк :) Ну это несколько 8kb блоков... Я бы даже не заморачивался с оптимизацией. Ну, это вопрос скорее концептуального характера. Сейчас 1000, а завтра може будет и таблица с 1000000, и как я в таком случае должен буду поступать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 00:43 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
На таблице в 3-10 записей PostgreSQL никогда не виберет Index Scan, на таких микроскопических таблицах он всегда будет исполбзовать Seq Scan, что и видно с твоих EXLAIN'ов. _____________________________________ Sorry for my Russian, if it is not OK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 15:15 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
Если в таблице меньше 100 тысяч записей, оптимизация обычно бесполезна - если делается выборка, то она делается относительно быстро (если индексы правильно созданы и не замусорены), а если обрабатываются все записи таблицы, то это происходит относительно медленно (пора создавать кэш-таблицы или материализованные виды, на ваш вкус). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2007, 15:21 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
MBG (пора создавать кэш-таблицы или материализованные виды, на ваш вкус). Вроде ж, Postgres не поддерживает MATERIALIZED VIEW. Есть только эмуляция на костылях PL/PgSql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2007, 19:37 |
|
||
|
Эффективность подзапросов?
|
|||
|---|---|---|---|
|
#18+
когда планнер видит, что подзапрос возвращает большое количество рядов, он сам "выпрямляет" запрос, переводя его на более эффективный джойн. так что не бойтесь за рост таблицы, но не забывайте регулярно обновлять статистику (analyze). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2007, 01:36 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34627090&tid=2005186]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 392ms |

| 0 / 0 |
