Предположим, у меня есть таблица базы данных с двумя полями «foo» и «bar». Ни один из них не является уникальным, но каждый из них индексируется. Однако, вместо того, чтобы индексироваться вместе, у каждого из них есть отдельный индекс.Может ли несколько индексов работать вместе?
Теперь предположим, что я выполняю такой запрос, как SELECT * FROM sometable WHERE foo='hello' AND bar='world';
В моей таблице огромное количество строк, для которых foo является «hello», и небольшое количество строк, для которых bar является «миром».
Таким образом, наиболее эффективной задачей для сервера базы данных, выполняемой под капотом, является использование индекса штриха для поиска всех полей, где bar является «миром», а затем возвращать только те строки, для которых foo является «hello». Это O(n)
где n - количество строк, где bar является «миром».
Однако, я думаю, возможно, что процесс произойдёт в обратном порядке, где используется индекс fo и результаты поиска. Это будет O(m)
где m - количество строк, где foo - «hello».
Итак, Oracle достаточно умна, чтобы эффективно искать здесь? Как насчет других баз данных? Или я могу сказать это в своем запросе для поиска в правильном порядке? Возможно, положив bar='world'
первым в статье WHERE
?
Informix также содержит эти предложения. В большинстве случаев вы не идете _help_ оптимизатора таким образом - это хорошо, что он делает. – hometoast 2008-09-29 15:16:49
К сожалению, у меня есть таблица с большим количеством столбцов, каждая со своим индексом. Пользователи могут запрашивать любую комбинацию полей, поэтому я не могу эффективно создавать индексы для каждой комбинации полей. Но если бы у меня было только два поля, требующие индексов, я бы полностью согласился с вашим предложением использовать два индекса. – 2008-09-29 15:51:57
Не пытайтесь даже извиниться:). Oracle, скорее всего, будет использовать «самый чувствительный» в вашем случае. Опять же, вы не должны полагаться только на оптимизацию Oracle. Но, с одной стороны, обновление плана объяснений и попытка сохранить его в актуальном состоянии - это хорошая идея. – Georgi 2008-09-30 00:11:22