为mysql中返回的每条记录选择最大值

irlmq6kh  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(313)

我的table看起来像这样
表1:

relid  BID 
1      1
1      2
1      3

表2:

id BID priority info 
1  1   0        Json string
2  1   1      **
3  1   2      ****
4  2   0      ***
5  2   1      ****

6  3   0     ****

问题是,我想选择所有出价的最高优先级只有从表2使用 inner join 对于表1,这意味着我想要得到这个结果

id  BID  Priority info 
3   1    2        Json String info
5   2    1      ***
6   3    0       ***

我用过这个查询,它工作得很好,但是对于大量的记录,它工作得太慢了!!在mysql中,抓取时间可能长达70秒,这对我的服务器来说是一场灾难!!!

select * from table1 inner join table2 on table1.BID = table2.BID where table1.relid = 1 and table2.priority = (select max(priority) as m from table2 where table1.BID = table2.BID)

任何人都有其他的建议,可以更好的工作性能!

pgx2nnw8

pgx2nnw81#

考虑以下几点:

SELECT y.id 
     , y.bid 
     , y.priority 
     , y.info
  FROM table1 x
  JOIN table2 y
    ON x.BID = y.BID 
  JOIN (SELECT bid, MAX(priority) max_priority from table2 GROUP BY bid) z
    ON z.bid = y.bid
   AND z.max_priority = y.priority
 WHERE x.relid = 1;

对于进一步的改进,我们确实需要看到所有相关表的正确create table语句以及explain的结果

相关问题