Как выбрать столбец для индексации, чтобы уменьшить поиск в данных? - PullRequest
0 голосов
/ 02 июня 2019

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

2 вопрос:

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

Таблица:

CREATE TABLE `_b_price` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `tickerDate` varchar(100) NOT NULL,
  `ticker` varchar(50) DEFAULT NULL,
  `date` DATE DEFAULT NULL,
  `close` int(11) DEFAULT NULL,
  `high` int(11) DEFAULT NULL,
  `low` int(11) DEFAULT NULL,
  `numOfTrades` int(11) DEFAULT NULL,
  `open` int(11) DEFAULT NULL,
  `value` bigint(20) DEFAULT NULL,
  `volume` int(11) DEFAULT NULL,
  `vwap` int(11) DEFAULT NULL,
  `state` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tickerDate` (`tickerDate`),
  KEY `date` (`date`),
  KEY `ticker` (`ticker`)
) ENGINE=InnoDB AUTO_INCREMENT=2667983 DEFAULT CHARSET=utf8

1 Ответ

0 голосов
/ 02 июня 2019

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

Но, поскольку я имел дело с такими таблицами, я могу дать вам несколько советов:

  • Объем для индексов может превышатьразмер INT.
  • Цены не являются целыми.
  • Не должно ли tickerDate быть типом данных DATE ??
  • Toss id, если вы не используете его по назначению.Повысить UNIQUE до PRIMARY KEY.
  • Подождите!Вы разрешаете только один ряд в день, у вас есть миллионы?Может быть, `tickerDate является неправильным? ??
  • PRIMARY KEY должно быть (ticker, date).Это устраняет необходимость в KEY(ticker).
  • Вам , возможно также необходимо INDEX(date).- Мне нужно увидеть ваши запросы.
  • Я подозреваю, что любой торгуемый предмет имеет ascii 'тикер', поэтому не используйте CHARSET=utf8.
  • Normalizeтикеры, замените (вероятно) MEDIUMINT UNSIGNED (предел 16M).

Подробнее:

  • Я думаю, вы имели в виду UNIQUE(TickerDate), чтобы быть UNIQUE (Ticker, TickerDate).(А затем повысить до PK, как указано выше.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...