SQL индекс для SELECT FROM table t JOIN - PullRequest
0 голосов
/ 13 июля 2020

Давно не играл с SQL.

Какой индекс лучше всего подходит для:

SELECT x.* 
FROM My_Table x 
INNER JOIN
    (SELECT id, MAX(update_time) AS last_update  
     FROM My_Table 
     GROUP BY name) y ON x.name = y.name 
                      AND x.score 
                      AND x.update_time = y.last_update)

Запрос может не иметь смысла ... но для ради этого.

ALTER TABLE My_Table ADD INDEX my_index(name, surname, update_time) ??

или

ALTER TABLE My_Table ADD INDEX my_index(update_time, name, surname) ??

Также есть запросы по имени, фамилии

1 Ответ

1 голос
/ 13 июля 2020

Сначала напишите запрос как:

SELECT x.*, 
FROM (SELECT x.*, MAX(update_time) OVER (PARTITION BY name, score ORDER BY update_time DESC) as last_update
      FROM my_table x
     ) x
WHERE update_time = last_update;

И используйте индекс (name, score, update_time desc).

С тем же запросом вы можете использовать:

select x.*
from my_table x
where x.update_time = (select max(x2.update_time)
                       from my_table x2
                       where x2.name = x.name and x2.score = x.score
                      );

Это часто имеет лучшую производительность (с правильным индексом) для многих баз данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...