SQL-запрос с более низкой стоимостью выполняется медленнее, чем запросы с более высокой стоимостью - PullRequest
0 голосов
/ 27 марта 2019

Я выполнил план выполнения для SQL-запроса в базе данных DB2 для двух запросов. Стоимость первого запроса составляет около 380000. После изменения запроса путем замены некоторых внутренних объединений подзапросами стоимость сократилась до 312 (примечание: не 312000, а только 312)

Однако после многократного выполнения каждого запроса более крупный запрос выполняется в среднем быстрее. Что может быть причиной этого?

1 Ответ

1 голос
/ 27 марта 2019

Для любой базы данных, в которой используется оптимизатор на основе затрат, стоимость является оценочной.Если оценка верна, должна быть корреляция между стоимостью запроса и временем выполнения.Иногда, однако, оценка далеко.И в целом вы с большей вероятностью будете смотреть на запрос, в котором оценки оптимизатора слишком далеки от оценки, потому что, когда оценки слишком далеки от плана, очень вероятно, что он будет плохим, запрос будет выполняться медленно, а кто-тособираюсь жаловаться.Люди обычно не смотрят на 99% запросов, в которых оценки оптимизатора верны.

Похоже, что оценка затрат оптимизатора в этом случае далека.Скорее всего, это результат неправильной статистики по какой-либо таблице, индексу или столбцу.Конечно, могут быть и другие проблемы - возможно, ожидается, что часть строк в кеше отключена или что дисковый ввод-вывод намного более или менее дорог, чем на самом деле (т.е. ваша подсистема ввода-вывода находится под сильным давлениеми медленно или у вас все на твердотельном диске, поэтому ввод / вывод очень быстрый).Но я всегда начинал с просмотра статистики.

...