|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Есть запрос: Код: sql 1. 2. 3. 4.
для него: Plan PLAN JOIN (S INDEX (ITSS), T INDEX (ITOWAR), V INDEX (IVALYTA), G INDEX (IGRUPPA), S2 INDEX (ITST, ITSS)) ------ Performance info ------ Prepare time = 15ms Execute time = 172ms Avg fetch time = 7,48 ms Current memory = 2 477 472 Max memory = 4 039 452 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 0 Fetches from cache = 3 265 Если добавить ORDER BY - время запроса увеличивается на два порядка: Код: sql 1. 2. 3. 4. 5.
Plan PLAN SORT (JOIN (S INDEX (ITSS), T INDEX (ITOWAR), V INDEX (IVALYTA), G INDEX (IGRUPPA), S2 INDEX (ITST, ITSS))) Adapted Plan PLAN SORT (JOIN (S INDEX (ITSS), T INDEX (ITOWAR), V INDEX (IVALYTA), G INDEX (IGRUPPA), S2 INDEX (ITST, ITSS))) ------ Performance info ------ Prepare time = 16ms Execute time = 11s 123ms Avg fetch time = 794,50 ms Current memory = 2 477 440 Max memory = 4 039 452 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 0 Fetches from cache = 163 808 Результат выборки 5600 записей. При упрощении запроса: Код: sql 1. 2. 3. 4. 5.
получаем: Plan PLAN SORT (JOIN (S INDEX (ITSS), T INDEX (ITOWAR), V INDEX (IVALYTA), G INDEX (IGRUPPA))) ------ Performance info ------ Prepare time = 15ms Execute time = 453ms Avg fetch time = 28,31 ms Current memory = 2 586 004 Max memory = 4 039 452 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 0 Fetches from cache = 84 683 Почему во втором запросе ORDER BY так тормозит запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 01:30 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
1) Версия FB, DDL таблиц 2) При выполнении запроса в ibExpert жмешь Fetch All (shift+F9) ? P.S. А зачем вообще второй раз делается join Towar_S ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 05:37 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
anbsoft, 1. Учись писать запросы с использованием явных JOIN 2. Увеличь TempCacheLimit или уменьшай ширину выборки 3. Замеряй время с помощью FetchAll ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 08:39 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
anbsoftT.* Почему во втором запросе ORDER BY так тормозит запрос? Потому что бешеная ширина и высота выборки провоцирует внешнюю сортировку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 13:23 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
anbsoft, что-то в плане выполнения я не наблюдаю индекса по полю TOWAR.NAME... Хотелось бы увидеть DDL всех участвующих таблиц. Скорость выполнения запроса может меняться в зависимости от выбранного плана запроса, при создании которого сервер опирается в том числе и на статистику индексов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 13:44 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
DBConstructoranbsoft, что-то в плане выполнения я не наблюдаю индекса по полю TOWAR.NAME...Это наверное, потому, что индекс для сортировки не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 13:54 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
WildSeryЭто наверное, потому, что индекс для сортировки не нужен. Может, ты хотел сказать "не используется сервером"? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 14:00 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
DBConstructor, Обычно, всё же, не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 14:09 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
WildSery, Обычно все же нужен, так как никто в здравом уме например несколько миллионов записей не хочет читать, а уж тем более сортировать. Тут правда всего 5600 записей, но не факт, что они все нужны топикстартеру. Кроме создания индекса можно еще ускорить выполнение, если выбрать сначала идентификаторы товара с сортировкой, а потом снаружи заджоинить LEFT все остальное. Но это если индекс не хочется делать. Ну или попробовать РБД, там быстрее будет работать. Начать нужно, конечно, с советов Дениса Симонова ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 16:03 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
RomanzekОбычно все же нужен, так как никто в здравом уме например несколько миллионов записей не хочет читать, а уж тем более сортировать. Прежде чем писать дальше, попробуй ORDER BY INDEX и SORT на какой-нибудь большой таблице. Тут тебе не кластерный индекс. P.S. Только про FetchAll не забудь, по индексу ПЕРВЫЕ записи получишь, конечно же, быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 16:43 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
WildSery, А я и не говорил про FetchAll. Я как раз говорил о ситуациях, когда не нужны все записи, а первые несколько только. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:00 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
RomanzekА я и не говорил про FetchAll. Я как раз говорил о ситуациях, когда не нужны все записи, а первые несколько только. вот только здесь 18379452 про "первые несколько только" нет ни одного слова ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:04 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
m7mRomanzekА я и не говорил про FetchAll. Я как раз говорил о ситуациях, когда не нужны все записи, а первые несколько только. вот только здесь 18379452 про "первые несколько только" нет ни одного слова Вот это: "так как никто в здравом уме например несколько миллионов записей не хочет читать, а уж тем более сортировать." Никто не читает миллионы, читают несколько (десятков) первых записей с фильтрами обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:55 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Ну и эта фраза тоже прямо свидетельствует: "но не факт, что они все нужны топикстартеру." ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 18:57 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Romanzekm7mпропущено... вот только здесь 18379452 про "первые несколько только" нет ни одного слова Вот это: "так как никто в здравом уме например несколько миллионов записей не хочет читать, а уж тем более сортировать." Никто не читает миллионы, читают несколько (десятков) первых записей с фильтрами обычно. В пятницу если не забуду и будет соответствующее настроение отвечу, а сейчас и некогда и неохота флейм разводить ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 19:00 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Romanzek, вообще большинство СУБД считает что по умолчанию клиент запрашивает все записи, и никогда не меняют стратегию оптимизации до тех пор пока оптимизатор явно не пнут в нужном направлении. Пинается обычно с помощью хинтов или ограничителей FIRST/ROWS/FETCH FIRST ... ONLY и т.д. По историческим причинам сложилось так что Firebird старается задействовать индекс при сортировке если выборка идёт из одной таблицы практически всегда, т.е. фактически реализуется стратегию first rows. А вот когда появляется join, то тут уже оптимизатор начинает оценивать эффективность самого join, т.е. выстраивает порядок соединения, и лишь в том случае если чтение потоков идёт с той таблицы по полю которой есть сортировка применяется индекс. Это уже больше похоже на стратегию all rows, но реализованную как-то не до конца. Хотя с другой стороны это позволяет (не всегда) иметь более отзывчивый DataSet в приложениях на Delphi если не делается FetchAll. В прочем в трёшке FB научился менять стратегию на first rows и порядок соединения если указаны ограничители FIRST/ROWS/FETCH FIRST ... ONLY. В RDB если я правильно понял есть ещё подсказка для цели оптимизатора first/all rows, которую по какой-то причине ДЕ не стал выносить наружу в FB3. P.S. Если вся таблица и индекс уже в кэше то навигация по индексу даже при fetchAll не имеет сильного негативного эффекта, она может оказаться даже эффективнее внешней сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 19:39 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Симонов Денис, Спасибо за информацию, наверное полезно будет в форуме сохранить. Просто ДЕ по моей просьбе делал все это в оптимизаторе и я как бы в курсе :) Понятно, что способ оптимизации зависит от того, что за запрос и как его использует приложение. Я всего лишь сделал подсказку какие еще есть случаи и способы оптимизации для них. Вступать во флейм тоже нет никакого желания, есть желание помочь топикстартеру, но ему, видимо, уже не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 21:00 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Romanzek, я и не собирался вступать во флейм. Это моё мнение по поводу order index vs sort. А ТС действительно пропал. Не ясно пытался он улучшить свой запрос по советам в топике или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2015, 21:15 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Симонов ДенисRomanzek, А ТС действительно пропал. Не ясно пытался он улучшить свой запрос по советам в топике или нет. Это был постгрешный тролллль :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 09:55 |
|
order by замедляет выполнение запроса в 100 раз
|
|||
---|---|---|---|
#18+
Romanzek, Это ты тут тролль. Влез с легкомысленными утверждениями, а затем стал вводить новые условия и допущения ("все полученные запросом записи не нужны"), чтобы подогнать свои утверждения под реальность. Выбор только из одной таблицы нескольких записей, без дополнительного отбора, в порядке какого-то поля - это редкость несусветная, а не "обычно". В любом другом случае эффективность выбора в порядке индекса - спорна, полезность или вредность однозначно определяется только для конкретных случаев. Как именно будут отсортированы пара тысяч записей, выбранных "обычным" запросом, абсолютно пофигу, если "ширина" выборки небольшая, то во многих случаях сортировка в памяти этих пары тысяч записей будет быстрее, чем обход в порядке индекса. Это подтверждается практическим опытом. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 10:50 |
|
|
start [/forum/topic.php?fid=40&fpage=69&tid=1562525]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 407ms |
0 / 0 |