Основное отличие оптимизации запросов от Oracle к SQL Server - PullRequest
0 голосов
/ 20 мая 2018

Я делаю статью об оптимизации запросов в разных СУБД и пытаюсь найти основные различия в них.

Оба используют CBO, оптимизация на основе затрат одинаковым образом, анализирует запрос -> генерирует планы -> выбирает лучшую статистику по базе данных.

Я все еще изучаю информацию об этихдва двигателя, но если кто-то знает, как они отличаются (или нет), будет оценено.

1 Ответ

0 голосов
/ 24 мая 2018

Не исчерпывающий ответ вообще, но хотел дать вам мое понимание.Короче говоря, у Oracle гораздо более развитый оптимизатор SQL.

Для начала у Oracle есть гораздо больше алгоритмов на выбор.Это означает, что иногда Oracle различает тонкие различия и предлагает, скажем, три алгоритма;MySQL (при тех же обстоятельствах) имеет только один на выбор.Поэтому у Oracle есть лучшие варианты для конкретных случаев.

Другое отличие состоит в том, что планы выполнения MySQL не очень читабельны.Я не говорю, что они плохие внутренне, просто что explain extended не говорит вам много специфических особенностей.Oracle очень четко различает предикаты access и filter , в то время как в MySQL вы на самом деле не знаете, что происходит.

В Oracle есть много алгоритмов, подходящих для параллельной работы.обработка на нескольких серверах, в то время как MySQL ограничен несколькими потоками на одном компьютере.Это может иметь значение для высоко параллелизуемых запросов, чем преимущество для мультисерверов.

В Oracle все еще есть RBO (оптимизатор на основе правил), который может быть полезен в некоторых случаях.MySQL нет.Во всяком случае, Oracle рекомендует не использовать его, но он все еще там, если вам это нужно.

Oracle предлагает множество оптимизаторов в форме комментариев (/* ... */, насколько я помню?) где вы можете настроить план выполнения в соответствии с вашими потребностями.В MySQL для этого меньше «оговорок».

...