Предположим, что у меня есть таблица базы данных с двумя полями: "foo" и "bar". Ни один из них не является уникальным, но каждый из них индексируется. Однако, вместо того, чтобы индексироваться вместе, каждый из них имеет отдельный индекс.
Теперь предположим, что я выполняю такой запрос, как SELECT * FROM sometable WHERE foo='hello' AND bar='world';
My table, огромное количество строк, для которых foo является "hello" , и небольшое количество строк, для которых bar является "миром" .
Таким образом, самая эффективная вещь для сервера базы данных, выполняемая под капотом, - это использовать индекс бара, чтобы найти все поля, где bar является "миром" , а затем возвращать только те строки, для которых foo является "hello" . Это O(n)
, где n - количество строк, где bar является "миром" .
Однако, я думаю, возможно, что процесс произойдёт в обратном порядке, где используется индекс fo и результаты поиска. Это будет O(m)
, где m - количество строк, где foo - "hello" .
Итак, Oracle достаточно умна, чтобы эффективно искать здесь? Как насчет других баз данных? Или я могу сказать это в своем запросе для поиска в правильном порядке? Возможно, сначала положив bar='world'
в предложение WHERE
?