MySQL верстка занимает слишком много времени, чтобы применить простой запрос
Это мой запрос,
SELECT
COUNT(a.ref) AS refoct2015,
COUNT(b.ref) AS refspet2015,
COUNT(c.ref) AS refoct2014,
port_ID
FROM
report AS a
JOIN
report_sept2015 AS b USING (port_ID)
JOIN
report_oct2014 AS c USING (port_ID)
GROUP BY port_ID , a.booking_date , b.booking_date , c.booking_date
но sql занимает больше 15 минут, чтобы дать мне результат, когда он не перестает работать. Я перезагружал его много раз, менял время чтения ("Правка"> "Настройки" и т. Д.), Но все равно ничего не замедлялось
1 ответ
Если вам нужен счет до того, как произойдет соединение, то вам нужно сгенерировать счет до того, как вы присоединитесь.
Это один метод для достижения этой цели:
SELECT A.Port_ID, A.refoct2015, B.refSept2015 , C.RefOct2014
FROM (SELECT Port_ID, Booking_Date, count(Ref) as refoct2015
FROM report
GROUP BY Port_Id, Booking_Date) A
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as refSept2015
FROM Report_sept2015
GROUP BY Port_Id, Booking_Date) B
ON A.Port_ID = B.Port_ID
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as RefOct2014
FROM report_oct2014
GROUP BY Port_Id, Booking_Date) C
ON B.Port_ID = C.Port_ID
Хотя кажется странным включать booking_date и не присоединяться к нему...
Если у меня в таблице A 100 различных дат и в таблице B 100 различных дат, а в таблице c 100 различных дат, то ваш набор результатов будет 100*100*100, при условии, что у каждого ресурса один и тот же port_Id... вероятно, почему он принимает 15 минут... Конечно, вы не пропустили соединение?
Это, кажется, имеет больше смысла для меня...
SELECT A.Port_ID, A.refoct2015, B.refSept2015 , C.RefOct2014
FROM (SELECT Port_ID, Booking_Date, count(Ref) as refoct2015
FROM report
GROUP BY Port_Id, Booking_Date) A
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as refSept2015
FROM Report_sept2015
GROUP BY Port_Id, Booking_Date) B
ON A.Port_ID = B.Port_ID
and A.Booking_date= B.Booking_date
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as RefOct2014
FROM report_oct2014
GROUP BY Port_Id, Booking_Date) C
ON B.Port_ID = C.Port_ID
and A.Booking_date= B.Booking_date
Однако это подразумевает, что если даты и идентификаторы портов указаны не во всех таблицах, у вас возникнут проблемы. с удалением данных из-за внутреннего соединения. Обычно я бы использовал полное внешнее соединение для решения этой проблемы, но MySQL не поддерживает его. Вы должны использовать Внешние объединения и союзы для имитации поведения.
Так что, а не продолжать угадывать, что вы после. Объясните, для чего эти таблицы и чего вы пытаетесь достичь на простом английском языке; в исходном вопросе, отредактировав его.
Боюсь, что мы попадаем в проблему XY здесь
Почему booking_date имеет значение, если его нет в списке избранных?
Похоже, что вы пытаетесь объединить данные из этих трех таблиц по дате... но затем не показывает дату....
Вы после чего-то вроде
Port_Id Date Oct2015 Sept2015 Oct2014
1 1/1/2015 500 250 0
1 1/2/2015 100 60 0
2 1/1/2015 100 540 60
?