powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / какой запрос легче?
10 сообщений из 10, страница 1 из 1
какой запрос легче?
    #39225124
tantico2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две таблицы, Заказчики и Заказы, приблизительно такие:
TB_CUSTOMERS: (CUST_ID, NAME...)
TB_ORDERS: (ORDER_NUM, CUST_ID....)

И есть два способа реализовать одну и ту же выборку:

А) SELECT O.NUM, C.NAME FROM TB_ORDERS O JOIN TB_CUSTOMERS C ON O.CUST_ID=C.CUST_ID

Б) Процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    ...
     for 
        select cust_id, order_num from tb_orders
        into :id, :num
     do
        select name from tb_customers where cust_id = :id
     ...

Одинаковы ли эти способы с точки зрения производительности для сервера?
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225132
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глупость спрошу, но планы запросов какие?
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225173
tantico2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в планах я не силён... но будем считать, что все поля, которые участвуют в where/join индексированы и сервер с планом не ошибётся
p.s. на всяк.случай - fb 2.5 3й диалект
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225194
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tantico2> все поля, которые участвуют в where/join индексированы
tantico2> p.s. на всяк.случай - fb 2.5 3й диалект

Нет, не одинаковы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225222
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tantico2в планах я не силён.
Планы показывает IBExpert при выполнении (F9) или препарировании (Ctrl+F9) запроса в SQL-редакторе.
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225223
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tantico2Есть две таблицы, Заказчики и Заказы, приблизительно такие:
TB_CUSTOMERS: (CUST_ID, NAME...)
TB_ORDERS: (ORDER_NUM, CUST_ID....)

И есть два способа реализовать одну и ту же выборку:

А) SELECT O.NUM, C.NAME FROM TB_ORDERS O JOIN TB_CUSTOMERS C ON O.CUST_ID=C.CUST_ID

Б) Процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    ...
     for 
        select cust_id, order_num from tb_orders
        into :id, :num
     do
        select name from tb_customers where cust_id = :id
     ...

Одинаковы ли эти способы с точки зрения производительности для сервера?

нет.

абсолютно разные.

несопоставимые.

запросы, естественно, надо делать по плану А).
второе. - это вообще не запрос.
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225224
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tantico2,

а хз, мерить надо. В данном случае запрос должен быть эффективней.

Запрос может соединять таблицы не в том порядке который у тебя в процедуре. Учитывая что кардинальность TB_CUSTOMERS обычно меньше TB_ORDERS, то скорее всего порядок будет обратный.
Для начала почитай http://www.ibase.ru/dataaccesspaths/
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225954
tantico2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисДля начала почитай http://www.ibase.ru/dataaccesspaths/
Спасибо, буду смотреть.
miwaonlineПланы показывает IBExpert
Знаю. Просто я думал, что сервер всегда выдаёт одинаковую реакцию на одинаково написанные запросы с одинаковыми индексами.
Т.е. вариант А в любых базах, с любыми данными всегда будет выполняться одним и тем же способом. А вариант Б - своим, но тоже единственным.
Но вот товарищи подсказывают, что сервер что-то ещё принимает во внимание и его реакция, напр, на вар.А может оказаться разной в разных ситуациях.
Я правильно понимаю?
...
Рейтинг: 0 / 0
какой запрос легче?
    #39225976
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tantico2Просто я думал, что сервер всегда выдаёт одинаковую реакцию на одинаково написанные запросы с одинаковыми индексами.
Т.е. вариант А в любых базах, с любыми данными всегда будет выполняться одним и тем же способом. А вариант Б - своим, но тоже единственным.
Но вот товарищи подсказывают, что сервер что-то ещё принимает во внимание и его реакция, напр, на вар.А может оказаться разной в разных ситуациях.
Я правильно понимаю?
Кроме запросов и индексов есть еще и сами данные, как ни странно. Соответственно, на разных данных индексы будут разные со всеми вытекающими.
...
Рейтинг: 0 / 0
какой запрос легче?
    #39226077
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tantico2,

даже в столь примитивной схеме может быть
- много заказчиков, делающих редкие заказы
- мало заказчиков, делающих дофигища заказов.

Уже в этих условиях для обычного join сервер будет генерить разный план запроса. Твой for select - это программерская привычка к циклам, которая железобетонно определит порядок обращения к таблицам, независимо от их содержимого.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / какой запрос легче?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]