Выбор первичного ключа, суррогатного ключа, индекса в базе данных по торговле акциями MySQL - PullRequest
0 голосов
/ 30 декабря 2010

Тип базы данных: mysql

Столбцы: дата, время, цена1, кол-во1, цена2, кол-во2 время будет в миллисекундах.

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

Я буду выполнять запросы, такие как выберите цену и количество между «этой датой и временем» и «этой датой и временем», и результат может быть в миллионах.

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

Ответы [ 2 ]

0 голосов
/ 31 декабря 2010

Не уверен, почему вы говорите, что выбор даты и времени был бы плохой идеей (вы против составных ключей?)

Большая проблема для вас в том, что время не хранит миллисекунды. Смотрите эту ошибку для получения дополнительной информации об этом: http://bugs.mysql.com/bug.php?id=8523

Кроме того, кажется, что в ключе, идентифицирующем акции, например, тикер, чего-то не хватает. Поскольку тикер может меняться со временем, было бы неплохо ввести для него суррогат, такой как StockID. Вы могли бы сделать это в таблице под названием Stock или аналогичной.

Тогда для вашей таблицы торговли я бы предложил использовать StockID, Date and Time (но хранить время не в типе данных TIME, чтобы вы могли хранить миллисекунды. Задайте другой вопрос, если вам нужна помощь в этом).

Порядок ключей в ПК важен как для хранения, так и для восстановления. Для поиска вы хотите поставить наиболее селективные ключи для вашего запроса в первую очередь. Поэтому, если вы стремитесь получить доступ ко всем данным для акции одновременно (или для набора акций), сначала укажите StockID, чтобы с помощью индекса можно было быстро их найти. Если вы стремитесь получить доступ ко всем данным за определенный интервал, сначала укажите «Дата», а затем «Время».

Что касается хранилища, то лучше добавить его, так что сначала стоит указать дату и время.

Если вы хотите получить доступ в основном в диапазонах дат, но иногда по Stock, добавьте вторичный индекс в StockID.

0 голосов
/ 30 декабря 2010

Поскольку у вас нет естественного ключа (так что в каждой строке нет ничего уникального), вам необходимо добавить суррогатный ключ (для аргумента «транзакции»).Вы можете по-прежнему иметь индекс, основанный на дате и времени (который действительно должен быть одним столбцом) для эффективного сканирования периода.

...