| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > MSSQL: Скорость выполнения двух запросов |
| Автор: ДобренькийПапаша 23.7.2010, 18:31 | ||||
Есть два запроса, которые возвращают одно и тоже, отличаются они только одной строчкой.
А вот этот запрос выполняется быстрее на порядок:
Цена первого запроса примерно 0.2, а второго запроса 0.01. Вопрос: почему? |
| Автор: skyboy 23.7.2010, 21:04 |
| сделай explain запросам |
| Автор: Frees 23.7.2010, 21:24 | ||
в первом запросе не используется индекс если стоит вопрос оптимизации то лучше переделать IN на EXISTS, по слухам EXISTS быстрее, сам тестов не делал. Поправьте если не прав
|
| Автор: ДобренькийПапаша 24.7.2010, 07:49 | ||
Что это значит? |
| Автор: skyboy 24.7.2010, 10:26 |
| explain даст ответ на вопрос: "почему?" http://forum.vingrad.ru/forum/topic-274036/kw-profiling.html http://dev.mysql.com/doc/refman/5.0/en/explain.html |
| Автор: Zloxa 25.7.2010, 12:52 |
| sql-ex? там вроде была педалька "показать план запроса". План запроса это то, где Вы смотрите "цену". На самом деле вопрос забавный. Скорее всего предикат prd.model = prd.model вводит MS в заблуждение относительно того, что подзапрос кореллированный, в результате MS строит разные планы для этого запроса. Если это не баг, то, как минимум, недоделка оптимизатора. |
| Автор: skyboy 25.7.2010, 13:27 |
| да, кстати, explain - конструкция для mysql а с чего я взял, что речь идет о mysql? |
| Автор: Zloxa 25.7.2010, 17:02 |
Собсна вот планы![]() ![]() Если честно, даже после длительной медитации над этими запросами, я так и не понял, от чего в первом случае выполняетcя inner join, а не semi join, как во втором запросе, план которого мне кажется куда более разумным. Однако ж косты у запросов отличаются отнюдь не на порядок, как то было обозначено ТС. |
| Автор: DimW 26.7.2010, 06:48 |
| удалил. |
| Автор: azesmcar 26.7.2010, 08:42 |
| Zloxa На какой СУБД проводился опыт? Есть ли там возможность отключить оптимизацию для запроса? Случаи плохой оптимизации бывают, иногда отключение оптимизации на Oracle давало значительное повышение скорости работы запроса. |
| Автор: Zloxa 26.7.2010, 09:04 |
http://sql-ex.ru/крутится на ms sql 2003 или старше.... ибо конструкцию with держит у меня в свою очередь вопрос ТС Откуда подчерпнут этот, на первый взгляд, нелепый трюк с предикатом "prd.model = prd.model"? |
| Автор: ДобренькийПапаша 26.7.2010, 20:01 |
| Да, я прошу прощения. Ошибся по поводу того, что различия в стоимостях на порядок. Это действительно вопрос с сайта sql-ex. Там при выполнении задания бывает ссылка слева появляется на обсуждение данного задания на форуме. Такой нелепый трюк с предикатом предложили именно там. Если вы зарегены там, то вот http://www.sql-ex.ru/forum/Lforum.php?F=3&N=9#20 Я там же спросил, дескать почему один запрос выполняется быстрее другого? Местный гуру сказал, цитирую: "Такой предикат не ускоряет запрос, а изменяет стоимость плана." А почему стоимость плана меняется в лучшую сторону?))) Я там просто дальше расспрашивать не стал, так как ответили мне неохотно))) |