mysql日期字段的最佳索引

xytpbqjk  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(294)

我´我们得到了一个包含41000000行的表,其结构如下:

什么是最好的索引 date 要启用这样的快速筛选 select count(*) from market_db_candle where date >= 2018-09-05 and date <= 2018-09-09;

gorkyyrv

gorkyyrv1#

对于您显示的查询,您不能比上的索引做得更好 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:将日期文字放在单引号内。

相关问题