Как оптимизировать доступ к этим данным? - PullRequest
2 голосов
/ 25 ноября 2008

У меня есть таблица, которая состоит из 200 компаний, цены на акции на 5 лет. Это одна большая таблица, которая состоит из названия компании, биржевого открытия, максимума, минимума, закрытия, даты

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

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

Спасибо.

Ответы [ 8 ]

3 голосов
/ 25 ноября 2008

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

2 голосов
/ 25 ноября 2008

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

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

1 голос
/ 25 ноября 2008

Неверное цитирование кого-либо:

Правила оптимизации

  1. Не делай этого.
  2. Только для ЭКСПЕРТОВ: пока не делайте этого.

Если вопрос звучит так: «... оставить это в покое или я make it more optimized», оставлю это в покое , пока вы не узнаете, измеряя, что существует проблема.

Если возникла проблема с запросом или обновлением таблицы, обновите свой вопрос, указав подробную информацию о запросе, любых индексах, частоте обновления / доступа к таблице и т. Д. этот момент.

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

1 голос
/ 25 ноября 2008

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

0 голосов
/ 25 ноября 2008

Это не оптимизация (хотя вы можете утверждать, что это нормализация, если компании могут изменить имя):

CREATE TABLE company (
  id INTEGER PRIMARY KEY, -- Well, this would be a serial, but that works different in different DBMS
  name VARCHAR(256) UNIQUE
);

CREATE TABLE price (
  company_id INTEGER REFERENCES company(id) NOT NULL,
  date  TIMESTAMP NOT NULL,
  open  DECIMAL, -- Just grabbed a type here, probably not right for you.
  high  DECIMAL,
  low   DECIMAL,
  close DECIMAL,

  PRIMARY KEY(company_id, date)
);

См. здесь для получения информации о генерации ключа.

Как вы относитесь к компаниям, меняющим название, кстати? Игнорирование этого было бы простым ответом, но правильно ли это? :)

Итак, в любом случае, если таблица станет слишком большой для хорошей производительности, я просто раздел it.

0 голосов
/ 25 ноября 2008

Нормализованные и оптимизированные не всегда одно и то же.

Что ваши пользователи собираются делать с данными?

0 голосов
/ 25 ноября 2008

Я бы добавил поле UID и несколько измерений для даты (то есть таблица лет, таблица лет + месяцы, таблица лет + кварталы, таблица финансовых лет и т. Д.).

0 голосов
/ 25 ноября 2008

У меня есть таблица для компании и таблица для цен на акции в определенный день (биты открытия / максимума / минимума / закрытия), чтобы избежать дублирования информации о компании везде.

...