Несколько индексов могут сотрудничать?

Вы должны сами инициировать и обновлять представления фрагмента. Вернитесь к своему делу и выполните следующие действия.

  1. Определить интерфейс для передачи данных (текст в EditText) из первого фрагмента в действие.
  2. При нажатии на кнопку на первом фрагменте вызовите метод обратного вызова с данными наряду с действием.
  3. В методе обратного вызова действия создайте новый экземпляр нового / второго фрагмента, который получает текст в качестве параметра.
  4. В новом / втором фрагменте напишите код, чтобы получить значение, переданное из действия, затем установите его в качестве содержимого EditText.
14
задан Diomidis Spinellis 29 September 2008 в 15:21
поделиться

9 ответов

Oracle будет почти наверняка использовать самый выборочный индекс для управления запросом, и можно проверить это с объяснить планом.

, Кроме того, Oracle может объединить использование обоих индексов несколькими способами - она может преобразовать индексы B-дерева в битовые массивы и выполнить битовый массив И операцию на них, или она может выполнить хэширование на rowid's, возвращенном двумя индексами.

Один важный фактор здесь мог бы быть любой корреляцией между запрашиваемыми значениями. Если нечто ='hello' счета на 80% значений в таблице и панели ='world' счета на 10%, то Oracle собирается оценить, что запрос возвратится 0.8*0.1 = 8% строк таблицы. Однако это не может быть корректно - запрос может на самом деле возвратить 10% rwos или даже 0% строк в зависимости от того, насколько коррелированый значения. Теперь, в зависимости от распределения тех строк всюду по таблице не может быть эффективно использовать индекс для нахождения их. Вы, возможно, все еще должны получить доступ (говорят), что 70% или блоки таблицы для получения необходимых строк (Google для "кластеризации фактора"), в этом случае Oracle собирается выполнить ful сканирование таблицы, если это получает корректную оценку.

В 11 г можно собрать многостолбцовые статистические данные для помощи с этой ситуацией, которой я верю. В 9i и 10 г можно использовать динамическую выборку, чтобы заставить очень хорошую оценку количества строк быть полученной.

Для получения плана выполнения делают это:

explain plan for
SELECT *
FROM   sometable
WHERE  foo='hello' AND bar='world'
/
select * from table(dbms_xplan.display)
/

Контраст, что с:

explain plan for
SELECT /*+ dynamic_sampling(4) */
       *
FROM   sometable
WHERE  foo='hello' AND bar='world'
/
select * from table(dbms_xplan.display)
/
12
ответ дан 1 December 2019 в 10:19
поделиться

Да, можно дать "подсказки" с запросом к Oracle. Эти подсказки замаскированы как комментарии ("/* ПОДСКАЗКА * / ") к базе данных и являются главным образом конкретным поставщиком. Таким образом, одна подсказка для одной базы данных не будет работать над другой базой данных.

я использовал бы индексные подсказки здесь, первую подсказку для маленькой таблицы. См. здесь .

, С другой стороны, если Вы часто ищете по этим двум полям, почему бы не создать индекс на этих двух? У меня нет правильного синтаксиса, но это было бы что-то как

CREATE INDEX IX_BAR_AND_FOO on sometable(bar,foo);

Этот способ, которым поиск данных должен быть довольно быстрым. И в случае, если конкатенация является уникальным hten, Вы просто создаете уникальный индекс, который должен быть молнией быстро.

3
ответ дан 1 December 2019 в 10:19
поделиться

Так Oracle, достаточно умная для поиска эффективно здесь?

простой ответ, "вероятно". Существуют lots'o' очень яркие люди в каждом из поставщиков базы данных, работающих над оптимизацией оптимизатора запросов, таким образом, это, вероятно, делает вещи, о которых Вы даже не думали. И если Вы обновите статистику, то она, вероятно, сделает еще больше.

2
ответ дан 1 December 2019 в 10:19
поделиться

Eli,

В комментарии Вы записали:

, К сожалению, у меня есть таблица с большим количеством столбцов каждый с их собственным индексом. Пользователи могут запросить любую комбинацию полей, таким образом, я не могу эффективно создать индексы на каждой полевой комбинации. Но если бы у меня действительно только было два поля, нуждающиеся в индексах, то я достиг бы единой точки зрения с Вашим предложением использовать два индекса. †“Eli Courtwright (29 сентября в 15:51)

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

Этот сценарий точно, почему растровые индексы были изобретены - для обработки времен, когда неизвестные группы столбцов будут использоваться в где пункт.

На всякий случай кто-то говорит, что BMIs для низких столбцов кардинальности только и не могут относиться к Вашему случаю. Низко является, вероятно, не столь маленьким, как Вы думаете. Единственной реальной проблемой является параллелизм DML к таблице. Должно быть единственным, распараллелил или редкий, чтобы это работало.

3
ответ дан 1 December 2019 в 10:19
поделиться

Прежде всего я предположу, что Вы говорите о хорошем, нормальном, стандартное b*-tree индексирует. Ответ для растровых индексов радикально отличается. И существует много опций для различных типов индексов в Oracle, которая может или не может изменить ответ.

Как минимум, если оптимизатор может определить селективность конкретного условия, это будет использовать более выборочный индекс (т.е. индекс на панели). Но если Вы скосили данные (существуют значения N в панели столбца, но селективность какого-то конкретного значения существенно более или менее, чем 1/Н из данных), у Вас должна была бы быть гистограмма на столбце для сообщения оптимизатора, какие значения более или менее вероятны. И если Вы используете, связывают переменные (как все хорошие разработчики OLTP должны), в зависимости от версии Oracle, у Вас могут быть проблемы с, связывают переменное заглядывание.

Потенциально, Oracle могла даже сделать динамическое преобразование двух b*-tree индексы к битовым массивам и объединить битовые массивы для использования обоих индексов для нахождения строк, которые она должна получить. Но это - довольно необычный план запросов, особенно если существует только два столбца, где один столбец является очень выборочным.

2
ответ дан 1 December 2019 в 10:19
поделиться

Можно обеспечить подсказки относительно который индекс использовать. Я не знаком с Oracle, но в Mysql можно использовать USE|IGNORE|FORCE_INDEX (см. здесь для получения дополнительной информации). Для лучшей производительности, хотя необходимо использовать объединенный индекс.

1
ответ дан 1 December 2019 в 10:19
поделиться

Я уверен, что Вы можете также сделать, чтобы Oracle отобразила план запросов, таким образом, Вы видите точно, какой индекс используется сначала.

1
ответ дан 1 December 2019 в 10:19
поделиться

Лучший подход должен был бы добавить нечто к индексу панели или добавить панель к индексу нечто (или оба). Если индекс нечто также содержит индекс на панели, что дополнительный уровень индексации не будет влиять на утилиту индекса нечто ни в каком текущем использовании того индекса, и при этом это не будет заметно влиять на выполнение поддержания того индекса, но это даст дополнительную информацию базы данных для работы с в оптимизации запросов такой как в примере.

1
ответ дан 1 December 2019 в 10:19
поделиться

Это лучше, чем это.

Индекс Ищет, всегда более быстры, чем полные сканирования таблицы. Таким образом, негласно Oracle (и SQL-сервер в этом отношении) сначала определит местоположение диапазона строк на обоих индексах. Это затем посмотрит, какой диапазон короче (видящий, что это - внутреннее объединение), и это выполнит итерации более короткого диапазона для нахождения соответствий с большими из двух.

1
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: