Мои таблицы выглядят примерно так
Таблица 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)
у кого есть другие предложения, которые могут работать с лучшей производительностью!
Рассмотрим следующее:
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
relid
иtable1.id
это одно и то же?