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