gpt4 book ai didi

mysql select unique date 在数据库上需要永远执行 3.74 亿行

转载 作者:行者123 更新时间:2023-11-29 08:25:56 24 4
gpt4 key购买 nike

我有一个 MYSQL 数据库,其表定义如下:

CREATE TABLE `minute_data` (
`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`open` decimal(10,2) DEFAULT NULL,
`high` decimal(10,2) DEFAULT NULL,
`low` decimal(10,2) DEFAULT NULL,
`close` decimal(10,2) DEFAULT NULL,
`volume` decimal(10,2) DEFAULT NULL,
`adj_close` varchar(45) DEFAULT NULL,
`symbol` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`symbol`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

它存储来自股票市场的 1 分钟数据点。主键是符号和日期列的组合。这样我在任何时候对于每个交易品种都只有 1 个数据点。

我想知道为什么以下查询需要这么长时间,以至于我什至无法等待它完成:

select distinct date from test.minute_data where date >= "2013-01-01" order by date asc limit 100;

但是我可以从 分钟数据中选择 count(*); 并且很快就会完成。

我知道这一定与表中有超过3.74亿行数据有关,而我的台式电脑距离 super 计算机还很远。

有谁知道我可以尝试加快查询速度吗?我需要放弃使用这么大的 MySQL 表的所有希望吗?

非常感谢!

最佳答案

当您在 2 列上有复合索引时,例如您的 (symbol, date) 主键,按键的前缀进行搜索和分组将会很快。但是搜索不包含索引中第一列的内容需要扫描所有行或使用其他索引。

如果您通常不需要搜索没有日期符号,则可以将主键更改为(日期,符号) 。或者您可以在日期上添加额外的索引:

alter table minute_data add index (date)

关于mysql select unique date 在数据库上需要永远执行 3.74 亿行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17929887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com