Лучший индекс для поля даты mysql - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть таблица с 41 000 000 строк следующей структуры: enter image description here

Что такое лучший индекс для date, чтобы включитьбыстрая фильтрация вот так

select count(*) from market_db_candle where date >= 2018-09-05 and date <= 2018-09-09;

1 Ответ

0 голосов
/ 10 сентября 2018

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

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

CREATE TABLE market_db_candle_count_by_day (
  date DATE PRIMARY KEY,
  count INT UNSIGNED NOT NULL
);

Заполните его подсчетами по дням:

INSERT INTO market_db_candle_count_by_day
SELECT date, COUNT(*)
FROM market_db_candle
GROUP BY date;

Затем вы можете запросить СУММУ подсчетов:

select sum(count) as count from market_db_candle_count_by_day 
where date >= '2018-09-05' and date <= '2018-09-09';

Вы должны сохранитьпоследняя таблица синхронизируется и обновляется при необходимости.

PS: вставьте литералы даты в одинарные кавычки.

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