【问题标题】:SQL index for SELECT FROM table t JOINSELECT FROM table t JOIN 的 SQL 索引
【发布时间】:2020-07-13 15:15:42
【问题描述】:

好久没玩 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) ??

还有基于姓名、姓氏的查询

【问题讨论】:

  • 什么是数据库?您可以在 PostgreSQL 中进行更好的优化。
  • MySQL 数据库。

标签: sql join indexing


【解决方案1】:

首先,将查询写成:

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
                      );

这通常在许多数据库上具有最佳性能(使用正确的索引)。

【讨论】:

  • 不错。这将如何在 100K+ 行下执行?
  • @UnguruBulan 。 . .有了正确的索引,它应该很快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多