获取按日期排序的最后记录的最佳性能方法
Posted
技术标签:
【中文标题】获取按日期排序的最后记录的最佳性能方法【英文标题】:Best performance aproach for get the last records sorted by date 【发布时间】:2020-08-05 18:21:11 【问题描述】:我有一个包含超过 6000 万条记录的表。该表有 510 列。所有列都是双精度的。
我为日期字段创建了索引:
CREATE INDEX index_btree_date ON mytable USING BTREE (date);
表格如下所示:
--------------------------------------------------------------
| id | date | fk_system | col1 | col2 | col-n |
--------------------------------------------------------------
| 1 | 2020-08-05 15:00:00 | 1 | 1 | 2 | 3 |
--------------------------------------------------------------
| 2 | 2020-08-05 15:00:00 | 2 | 1 | 2 | 3 |
--------------------------------------------------------------
| 3 | 2020-08-05 15:01:00 | 1 | 1 | 2 | 3 |
--------------------------------------------------------------
| 4 | 2020-08-05 15:01:00 | 2 | 1 | 2 | 3 |
--------------------------------------------------------------
| 5 | 2020-08-05 15:02:00 | 1 | 1 | 2 | 3 |
--------------------------------------------------------------
| 6 | 2020-08-05 15:02:00 | 2 | 1 | 2 | 3 |
--------------------------------------------------------------
| 7 | 2020-08-05 15:03:00 | 1 | 1 | 2 | 3 |
--------------------------------------------------------------
| 8 | 2020-08-05 15:03:00 | 2 | 1 | 2 | 3 |
--------------------------------------------------------------
我尝试运行此查询:
SELECT t.id, t.date, t.fk_system, t.col1, t.col2, t.col3
FROM mytable t
WHERE t.fk_system = 106
ORDER BY t.date DESC
LIMIT 2880;
此查询运行时间超过 5 分钟,性能非常差。
有人可以帮我吗?
谢谢!
【问题讨论】:
注意:date
是列的错误名称。这是一个非常糟糕的时间戳名称。
【参考方案1】:
对于这个查询:
SELECT t.id, t.date, t.fk_system, t.col1, t.col2, t.col3
FROM mytable t
WHERE t.fk_system = 106
ORDER BY t.date DESC
LIMIT 2880;
您希望在(fk_system, date desc)
上建立索引。 date
的第一个索引对这个查询没有帮助。
【讨论】:
以上是关于获取按日期排序的最后记录的最佳性能方法的主要内容,如果未能解决你的问题,请参考以下文章