индекс с несколькими столбцами - хорошо при выполнении запроса только на одном столбце?

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

, например,

>>> class C(object):
...     def foo(self):
...         print "Hi!"
...
>>>
>>> def bar(self):
...     print "Bork bork bork!"
...
>>>
>>> c = C()
>>> C.bar = bar
>>> c.bar()
Bork bork bork!
>>> c.foo()
Hi!
>>>

Это также (насколько я знаю) делает реализацию времени выполнения Python легче.

11
задан svrist 8 December 2009 в 08:13
поделиться

4 ответа

Это должно быть полезно, поскольку индекс по (id, text) сначала индексируется по id, а затем по тексту соответственно.

  • Если вы запросите по id, будет использоваться этот индекс.
  • Если вы запрашиваете по идентификатору и тексту, этот индекс будет использоваться.
  • Если вы запросите по тексту, этот индекс НЕ будет использоваться.

Изменить: когда я говорю, что это «полезно», я имею в виду, что это полезно с точки зрения скорости / оптимизации запросов. Как указала Сьюн Риверс, это не будет означать, что вы получите уникальную запись с указанием только идентификатора (если вы не укажете идентификатор как уникальный в определении таблицы).

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

Oracle поддерживает несколько способов использования индекса, и вам следует начать с понимания всех из них. так что прочитайте здесь: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#sthref973

Ваш запрос выберите * из таблицы, где col2 = 12 может с пользой использовать сканирование с пропуском индекса, если ведущий столбец имеет очень низкую мощность, или быстрое сканирование полного индекса, если это не так. Это, вероятно, подойдет для создания отчетов,

9
ответ дан 3 December 2019 в 02:30
поделиться

Я предполагаю, что id является первичным ключом. Нет смысла добавлять в индекс первичный ключ, так как он всегда будет уникальным. Добавление чего-то уникального к чему-то еще будет уникальным.

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

Если id не является вашим первичным ключом, то вам не гарантировано получение уникального результата по вашему запросу.

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

2
ответ дан 3 December 2019 в 02:30
поделиться

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

Глядя в вашем примере:

select * from mytable where col1 = 10 and col2=12 and col3 = 16

Вы можете создать 3 индекса битовой карты:

create bitmap index ix_mytable_col1 on mytable(col1);
create bitmap index ix_mytable_col2 on mytable(col2);
create bitmap index ix_mytable_col3 on mytable(col3);

Эти индексы битовой карты имеют большое преимущество, заключающееся в том, что они могут быть объединены по мере необходимости.

Таким образом, каждый из следующих запросов будет использовать один или несколько индексов:

select * from mytable where col1 = 10;

select * from mytable where col2 = 10 and col3 = 16;

select * from mytable where col3 = 16;

Итак, битовые индексы могут быть для вас вариантом. Однако, как указал Дэвид Олдридж, в зависимости от вашего конкретного набора данных может быть предпочтительнее один индекс (col1, col2, col3). Как всегда, это зависит от обстоятельств. Взгляните на свои данные, возможные запросы к этим данным и убедитесь, что ваша статистика актуальна.

Надеюсь, это поможет.

2
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

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