我有一个包含大量数值数据的表,我需要查询该表以获得与特定date_added
和name
最接近的行。
我的问题是这个数据不是按日期排序的,所以当返回结果时,我需要包含ORDER BY date_added
(否则它不会返回正确的行)。由于ORDER BY
的条件,目前执行此操作需要90秒。
有什么方法可以进一步优化它吗?我已经索引了date_added
和name
列,所以我不确定还能做什么。我考虑过创建一个新表,其中的数据按照date_added
的顺序重新排序,但这并不实用,因为需要定期添加新条目。
我将数值数据存储为十进制,因为它可能非常小、非常大或两者都有。也许以不同的方式存储此数据会更有效?
2条答案
按热度按时间hwazgwia1#
在名称和日期上添加一个复合索引。上面的查询将在不使用文件排序的情况下运行。
查询的另一种方式:
小提琴:http://sqlfiddle.com/#!9/4 e8 d89/1 .
dtcbnfnu2#
您可以使用范围分区:
https://dev.mysql.com/doc/refman/5.7/en/partitioning-range.html
您需要根据您拥有的日期范围来定义分区。
对于下面的查询,将仅使用分区“future”: