mysql日期字段的最佳索引

mysql日期字段的最佳索引,mysql,date,indexing,Mysql,Date,Indexing,我有一个41000000行的表,结构如下: date的最佳索引是什么,以实现这样的快速筛选 从market\u db\u candle中选择count(*),其中date>=2018-09-05和date对于您显示的查询,您不能比您已有的date索引做得更好。查询将检查与日期范围匹配的所有行,但至少不会检查日期范围之外的任何行。如果这使得查询能够检查数千或数百万行,那就没什么帮助了。它必须检查行以进行计数 如果需要在更短的时间内对行进行计数的查询,一种策略是创建第二个表,每个日期存储一行,并且

我有一个41000000行的表,结构如下:

date
最佳索引是什么,以实现这样的快速筛选


从market\u db\u candle中选择count(*),其中date>=2018-09-05和date对于您显示的查询,您不能比您已有的
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';
选择sum(count)作为市场计数\u db\u蜡烛计数\u按天计数

其中date>='2018-09-05'和date有一个优秀的社区wiki,描述索引是如何工作的。了解它们的工作原理将帮助您确定哪些索引最能满足您的需要。最后,变量太多了,最好的办法是实现一个索引,更新统计数据,检查查询性能并解释计划。另一个技巧是:去掉
id
,并设置
主键(symbol\u id,date,time)
。什么是
tf
?你真的需要8字节的双倍码吗?