Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Sybase ASE12.5.x select distint vs where exists
|
|||
|---|---|---|---|
|
#18+
Господа, помогите разобаться с производительностью запросов Например есть список магазинов, есть список продаж со ссылкой на 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? Заранее всем большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2007, 18:52 |
|
||
|
Sybase ASE12.5.x select distint vs where exists
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2007, 02:27 |
|
||
|
Sybase ASE12.5.x select distint vs where exists
|
|||
|---|---|---|---|
|
#18+
Поставил простой эксперимент - сделал 2 таблицы - в 1й 10 записей во 2й 6 миллионов и сравнил как ведут себя вариант с distinct и с подзапросом. У варианта с подзапросом Total estimated I/O действительно меньше. Я ошибся, когда написал, что у варианта с подзапросом Total estimated I/O выше. Вариант с подзапросом, если измерять в i/o, действительно быстрее. Что, в общем-то, кажется логичным. Время выполнения в милисекундах сравнивать, наверное бессмысленно, оно гуляет от раза к разу и довольно сильно. Спасибо ещё раз за ответ. Вопросов больше нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 17:49 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35015592&tid=2011760]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
94ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 456ms |

| 0 / 0 |
