Версия для печати темы (https://pro1c.org.ua/index.php?s=b1c3c1a7bcd5308790a418db32543933&showtopic=8862)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Базы данных _ Есть ли разница в запросах?

Автор: Vofka 07.09.12, 10:28

Привет!

Есть 2 запроса:

SELECT
    qwe,
    asd,
    zxc
FROM
    (
        SELECT
            qwe,
            asd,
            zxc
        FROM
            Table
        WHERE
            Table.qwe = qaz
    ) AS HZ


и

SELECT
    qwe,
    asd,
    zxc
FROM
    (
        SELECT
            qwe,
            asd,
            zxc
        FROM
            Table
    ) AS HZ
WHERE
    HZ.qwe = qaz


Есть ли разница между ними по призводительности? Есть мнение, что первый запрос работает быстрее. Да? Нет? Ответ, пожалуйста, обосновывайте либо подкрепляйте линками.

Автор: arkadij 11.09.12, 17:23

Первый запрос быстрее.
Он сначала проводит вложенный SELECT, который усекает выборку для внешнего SELECT (стоящего первой строкой в запросе).


Во втором запросе внутренний вложенный SELECT не уменьшает выборку и поэтому внешний SELECT заново проходится по той же совокупности данных и выбирает строки соответствующие условию. Это двойная работа.

Автор: Vofka 11.09.12, 17:55

Я так понимаю, что сама выборка (ещё с наличием нужных индексов) будет занимать меньшую часть времени. Так? Затратная операция в данном случае будет фильтрация по условию. Так? Но и в первом и втором случае фильтрация будет осуществляться на одинаковом наборе данных. Т.е. реально почувтствуется ли прирост производительности?

Автор: sava1 12.09.12, 9:50

Цитата(Vofka @ 11.09.12, 18:55) *
фильтрация будет осуществляться на одинаковом наборе данных


при том на кешированном результате и готовом плане - не думаю, что будет заметна разница

Автор: Fynjy 12.09.12, 11:03

Цитата(sava1 @ 12.09.12, 10:50) *
при том на кешированном результате и готовом плане - не думаю, что будет заметна разница

При втором запросе разница может колебаться, как в одну, так и в другую сторону ... )

Автор: Batchir 12.09.12, 11:06

1. Если сам запрос выполнять в СКЛ, то должно выполнять то что описал arkadij.
2. В теории первый должен быстрее работать, на практике же может произойти совсем наоборот (это я к привязке к стороннему ПО говорю)
Например, 1С транслирует запрос на СКЛ сервер так как она это видит, а не так как это хочется СКЛ-серверу. Часто эта трансляция правильная, но может возникнуть ситуация когда при выполнении запроса (1 вариант) СКЛ-сервер выберет не оптимальную схему, в результате чего получим значительное ухудшение производительности. http://pro1c.org.ua/index.php?showtopic=316

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua