Общие результаты
Графики на рис. 5 показывают общие результаты измерения производительности. Оптимизация путем магической перезаписи на основе Filterjoin (т.е. magopt) может сильно повысить скорость выполнения запросов по сравнению с nomag. Так происходит при небольших размерах результата, поскольку в этом случае и фильтрующее множество является небольшим и достаточно селективным. Это позволяет ограничить вычисление сложного представления и тем самым сократить время выполнения. Однако, если размер фильтрующего множества возрастает, его преимущества медленно уменьшаются, а стоимость растет, так что в последней точке графика (размер 11986) алгоритм перестает выполнять перезапись на основе магических множеств. Это объясняет, почему в последней точке значения времени одинаковы для nomag и magopt. Алгоритм sbmag хорошо работает для более крупных запросов, на с двумя наиболее мелкими запросами справляется плохо. Чтобы понять причины такого поведения sbmag, обратим внимание на тот факт, что оптимизатор трактует сложное представление как временное отношение без индексов. Если другие соединения в запросе очень селективны, и другие отношения проиндексированы, то в наиболее дешевом плане представление часто ставится в начало порядка соединений. Основываясь на этом плане, sbmag принимает решение не использовать магические множества. Однако это именно те запросы, для которых можно ожидать наибольшей пользы от магии!
Интересный предмет для обсуждения представляет четвертый запрос (размер 236) на рис. 5. Мы видим, что производительность magopt слегка хуже, чем у nomag. Очевидно, что оптимизатор, выбирая для magopt магическую перезапись, ожидал, что результат будет лучше, чем у nomag. Это показывает, что оценки стоимости, принимаемые оптимизатором, отличаются от реальной стоимости из-за неточных статистики и/или предположений. Алгоритмы, подобные оценочной магической оптимизации, построенные поверх этих ошибок, могут время от времени могут приводить к неоптимальной производительности.
Рис. 6. Варианты перезаписи на основе магических множеств