Это должно минимизировать различие между методами и функциями. Это позволяет Вам легко генерировать методы в метаклассах или добавлять методы во времени выполнения к существующим ранее классам.
, например,
>>> 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 легче.
Это должно быть полезно, поскольку индекс по (id, text) сначала индексируется по id, а затем по тексту соответственно.
Изменить: когда я говорю, что это «полезно», я имею в виду, что это полезно с точки зрения скорости / оптимизации запросов. Как указала Сьюн Риверс, это не будет означать, что вы получите уникальную запись с указанием только идентификатора (если вы не укажете идентификатор как уникальный в определении таблицы).
Oracle поддерживает несколько способов использования индекса, и вам следует начать с понимания всех из них. так что прочитайте здесь: http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/optimops.htm#sthref973
Ваш запрос выберите * из таблицы, где col2 = 12
может с пользой использовать сканирование с пропуском индекса, если ведущий столбец имеет очень низкую мощность, или быстрое сканирование полного индекса, если это не так. Это, вероятно, подойдет для создания отчетов,
Я предполагаю, что id
является первичным ключом. Нет смысла добавлять в индекс первичный ключ, так как он всегда будет уникальным. Добавление чего-то уникального к чему-то еще будет уникальным.
Добавьте уникальный индекс к тексту
, если он вам действительно нужен, в противном случае просто используйте id
- уникальность для таблицы.
Если id
не является вашим первичным ключом, то вам не гарантировано получение уникального результата по вашему запросу.
Что касается вашего последнего примера с поиском по col2
, я думаю, вам может понадобиться другой индекс. Однако индексы не являются панацеей от проблем с производительностью, иногда необходимо оптимизировать структуру вашей базы данных или запросы,
Если причиной вашего вопроса является то, что у вас есть таблица с несколькими столбцами, и любая комбинация этих столбцов может использоваться в запросе, вам следует взглянуть на индексы 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). Как всегда, это зависит от обстоятельств. Взгляните на свои данные, возможные запросы к этим данным и убедитесь, что ваша статистика актуальна.
Надеюсь, это поможет.