Как мне индексировать следующую схему финансовых данных? - PullRequest
0 голосов
/ 04 июня 2011

Предположим, у меня есть данные фондового рынка со следующими полями

STOCK, DATE, BID, ASK

Мои наиболее распространенные запросы будут иметь следующий тип

где STOCK = ... И ДАТА = ... И ПРЕДЛОЖЕНИЕ = ...

Наряду с

где STOCK = ... И ДАТА = ... И СПРОСИТЬ = ...

Два основных варианта, которые я рассматриваю:

1. Indexing 

a) STOCK, DATE, BID
b) STOCK, DATE, ASK

2. Indexing 

a) STOCK, DATE
b) BID
c) ASK

Я не уверен, как выбрать между двумя

Ответы [ 2 ]

1 голос
/ 04 июня 2011

Если даты для BID и ASK - это такая же дата, я бы поместил их в одну таблицу - это просто проще и проще, когда у вас меньше таблиц.

Это также сделало бы возможными такие запросы:

select * from my_table where ask - bid > 5

Создайте эти индексы в соответствии с вашими пунктами where:

create index idx1 on my_table(stock, date, bid);
create index idx2 on my_table(stock, date, ask);
1 голос
/ 04 июня 2011

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

Из второго набора индексов маловероятно, что b) и c) когда-либо будут использоваться.a) будет использоваться, но будет менее производительным, чем индексы, перечисленные в 1.

Следует иметь в виду, что большинство СУБД редко будут использовать несколько индексов для удовлетворения выбора из одной таблицы - поэтому, когда это происходитдля индексации по акции / дате, а другая по ставке, при необходимости будет использоваться та или иная информация, но не обе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...