powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE12.5.x select distint vs where exists
3 сообщений из 3, страница 1 из 1
Sybase ASE12.5.x select distint vs where exists
    #35012453
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, помогите разобаться с производительностью запросов

Например есть список магазинов, есть список продаж со ссылкой на ID магазина.
Нужно вывести список магазинов в которых были продажи.

Здесь 2 решения:
select distinct shop_name from shops sh
inner join sales sal on sh.shop_id = sal.shop_id

select sh.* from shops sh
where exists
(select 1 from sales sal where sal.shop_id = sh.shop_id)


Если посмотреть планы запросов - то можно увидеть что total I/O cost у 2го варианта выше чем у первого.

Однако скорость выполнения 2го варианта всё-таки кажется выше.

Может ли запрос с большим total I/O cost работать быстрее? Если да, то на что влияет тогда эта total I/O cost?

Какой из вариантов по вашему более подходящий - join с distinct или корреляционный подзапрос с exists?

Заранее всем большое спасибо.
...
Рейтинг: 0 / 0
Sybase ASE12.5.x select distint vs where exists
    #35012744
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru wrote:
> Здесь 2 решения:
> select distinct shop_name from shops sh
> inner join sales sal on sh.shop_id = sal.shop_id
>
> select sh.* from shops sh
> where exists
> (select 1 from sales sal where sal.shop_id = sh.shop_id)
>
>
> Если посмотреть планы запросов - то можно увидеть что total I/O cost у
> 2го варианта выше чем у первого.
>

Как-то это очень странно. Второй запрос явно должен быть с меньшим
IO, поскольку толко одну запись должен поверять.

> Однако скорость выполнения 2го варианта всё-таки кажется выше.
>
> Может ли запрос с большим total I/O cost работать быстрее? Если да, то
> на что влияет тогда эта total I/O cost?

вы бы планы показали. Вообще, количество IO - это и есть скорость
запроса. Временем его мерять вообще бессмысленно, а вот кол-вом
io очень даже хорошо. Так что я бы сказал на первый взгдял,
что такого не бывает.

> Какой из вариантов по вашему более подходящий - join с distinct или
> корреляционный подзапрос с exists?

Подзапрос конечно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Sybase ASE12.5.x select distint vs where exists
    #35015592
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил простой эксперимент - сделал 2 таблицы - в 1й 10 записей во 2й 6 миллионов и сравнил как ведут себя вариант с distinct и с подзапросом. У варианта с подзапросом Total estimated I/O действительно меньше.
Я ошибся, когда написал, что у варианта с подзапросом Total estimated I/O выше.

Вариант с подзапросом, если измерять в i/o, действительно быстрее. Что, в общем-то, кажется логичным.

Время выполнения в милисекундах сравнивать, наверное бессмысленно, оно гуляет от раза к разу и довольно сильно.

Спасибо ещё раз за ответ. Вопросов больше нет.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Sybase ASE12.5.x select distint vs where exists
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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