【发布时间】:2011-12-09 17:53:15
【问题描述】:
我有一个MEMORY MYSQL 数据库,其中包含一个包含 200k+ 行的表。我使用这个数据库来测试交易策略,所以它被反复查询,令人作呕。没有新数据添加到数据库中。
此数据库主表中的一列是“时间”。在每个查询中,我的存储过程都会选择那些“时间”最多在查询输入“时间”之前或之后 2 小时的行。
由于我的数据库中的数据具有 5 分钟的分辨率,因此共有 288 个可能的“一天中的时间”(24 * 60/5 = 288)。
这意味着每个查询大致选择表的1/288。
此外,这意味着查询 A 和查询 B 之间存在巨大的重叠(紧随其后)。
此时,只有 1 个巨大的表在每个查询中被过滤。这(太)慢了。
我一直在尝试找出更优化的设置。我考虑过创建 288 个预过滤表,并在查询时简单地访问它们。但是,这会占用太多 RAM,最终会减慢查询速度而不是加快查询速度。
还有更优化的解决方案吗?
【问题讨论】:
-
假设您在右列上有基本的东西,如索引等。您是否检查过查询计划如何查看它是否按照您的预期使用索引。你有足够的内存来保存整个数据库吗?如果要交换磁盘,那么它不会比基于磁盘的表快
标签: mysql sql query-optimization large-data-volumes