Подход наивысшей производительности для сортировки последних записей по дате - PullRequest
0 голосов
/ 05 августа 2020

У меня есть таблица с более чем 60 миллионами записей. В этой таблице 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 минут , очень низкая производительность.

Может кто-нибудь мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

Для этого запроса:

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, не очень помогает с этим запросом.

...