выберите максимальное значение для каждой возвращаемой записи в MySQL

0

Мои таблицы выглядят примерно так

Таблица 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       ****

вопрос в том, что я хочу выбрать все BID с наивысшим приоритетом из таблицы2, используя inner join с таблицей 1, что означает, что я хочу получить этот результат

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

Я использовал этот запрос, и он отлично работает, но с большим количеством записей он работает слишком медленно! время загрузки может длиться до 70 секунд в MySQL, что является катастрофой для моего сервера !!!

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)

у кого есть другие предложения, которые могут работать с лучшей производительностью!

  • 0
    relid и table1.id это одно и то же?
  • 0
    да, спасибо, что прошел мимо, я изменил это
Показать ещё 1 комментарий
Теги:

1 ответ

0

Рассмотрим следующее:

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

  • 0
    создать table1 (relid int (11), bid int (11)) engine = myIsam; создать table2 (id int (11), bid int (11), proirity int (5), info Json) engine = myIsam;
  • 0
    Пожалуйста, измените ваш вопрос соответственно. А MyISAM? Какой век это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню