select from表t join的sql索引

jdg4fx2g  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(259)

很久没玩过sql了。
什么是最佳索引:

  1. SELECT x.*
  2. FROM My_Table x
  3. INNER JOIN
  4. (SELECT id, MAX(update_time) AS last_update
  5. FROM My_Table
  6. GROUP BY name) y ON x.name = y.name
  7. AND x.score
  8. AND x.update_time = y.last_update)

这个查询可能没有意义…但为了它。

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

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

此外,还有基于姓名的查询

2uluyalo

2uluyalo1#

首先,将查询编写为:

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

并使用索引 (name, score, update_time desc) .
对于相同的查询,可以使用:

  1. select x.*
  2. from my_table x
  3. where x.update_time = (select max(x2.update_time)
  4. from my_table x2
  5. where x2.name = x.name and x2.score = x.score
  6. );

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

展开查看全部

相关问题