Индекс силы использует в Oracle

Я обосновался с комбинацией обоих ответов:

dict((key, value) for key, value in f.__dict__.iteritems() 
    if not callable(value) and not key.startswith('__'))
33
задан Vijay 3 December 2009 в 06:51
поделиться

5 ответов

Я могу придумать две идеи, чтобы это произошло.

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

  2. Вы может проверить, находится ли сайт в режиме обслуживания в конструкторе каждого контроллера, и при необходимости перенаправить. Вероятно, это не самое оптимальное решение, так как вам придется повторять один и тот же код для каждого контроллера. Так что, даже если это сработает, вам, вероятно, будет лучше использовать регулярные выражения.

Маршрутизация в Кохане: http://docs.kohanaphp.com/general/routing

Регулярные выражения PHP: http: //www.php. http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm

44
ответ дан 27 November 2019 в 18:04
поделиться

Может быть много причин , по которым индекс не используется. Даже после того, как вы укажете подсказки , есть вероятность, что оптимизатор Oracle думает иначе и решит не использовать Index . Вам нужно пройти часть EXPLAIN PLAN и посмотреть, какова стоимость оператора с INDEX и без INDEX.

Предполагая, что Oracle использует CBO . Чаще всего, если оптимизатор считает, что с INDEX стоимость высока, даже если вы указываете это в подсказках, оптимизатор проигнорирует и продолжит полное сканирование таблицы. Ваше первое действие должно проверить DBA_INDEXES, чтобы узнать, когда статистика LAST_ANALYZED. Если не анализировать, вы можете установить таблицу, индекс для анализа .

begin 
   DBMS_STATS.GATHER_INDEX_STATS ( OWNNAME=>user
                                 , INDNAME=>IndexName);
end;

Для таблицы.

begin 
   DBMS_STATS.GATHER_TABLE_STATS ( OWNNAME=>user
                                 , TABNAME=>TableName);
end;

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

13
ответ дан 27 November 2019 в 18:04
поделиться

Если вы думаете, что производительность запроса будет лучше при использовании индекса, как вы можете заставить запрос использовать индекс?

Сначала вы, конечно, должны убедиться, что индекс дает лучший результат для возврата полного набора данных, правильно?

Подсказка индекса является здесь ключевой, но более современный способ ее указания заключается в методе именования столбцов, а не в методе именования индексов. В вашем случае вы должны использовать:

select /*+ index(table_name (column_having_index)) */ *
from   table_name
where  column_having_index="some value"; 

В более сложных случаях вы можете ...

select /*+ index(t (t.column_having_index)) */ *
from   my_owner.table_name t,
       ...
where  t.column_having_index="some value"; 

Что касается составных индексов, я не уверен, что вам нужно , чтобы указать все столбцы, но кажется вроде хорошая идея. См. Документацию здесь http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements006.

12
ответ дан 27 November 2019 в 18:04
поделиться

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

3
ответ дан 27 November 2019 в 18:04
поделиться

Вы можете использовать:

WITH index = ...

подробнее

-4
ответ дан 27 November 2019 в 18:04
поделиться
Другие вопросы по тегам:

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