Кроме того, имея предварительный запрос MAX (pubdate) в качестве первой таблицы FROM (псевдоним) и эту фильтрацию по WHERE NOT NULL от PUBDATE, вы будете получать только тех рекламодателей, у которых есть дата публикации. Так как ваш первый запрос должен быть оптимизирован, получить небольшой набор, ТО присоединиться к рекламодателям, бизнесу, категориям и т. Д. Используя STRAIGHT_JOIN, вы сообщаете оптимизатору, что нужно делать это в представленном вами порядке, поэтому он должен FORCE -первый запрос и используйте ТО, чтобы присоединиться к остальной части пути вниз ...
Я бы обеспечил индексирование на NewsPaperAd по идентификатору AdvertiserID и индексирование по остальным критериям JOIN. Без MySQL на этой машине моим единственным сомнительным предложением было бы
ГДЕ PubDate НЕ НУЛЬ
SELECT STRAIGHT_JOIN DISTINCT
Advertiser.AdvertiserID,
Business.Name,
Business.Address1,
Business.Address2,
Business.City,
Business.State,
Business.PostalCode,
Business.Country,
Business.Phone,
Business.Fax,
Business.Email,
AdvertiserCategory.CategoryID,
AdvertiserCategory.CategoryName AS Category,
QualifiedPubs.PubDate
FROM
(SELECT AdvertiserID,
MAX(PubDate) AS PubDate
FROM
NewsPaperAd
WHERE
PubDate IS NOT NULL
GROUP BY
AdvertiserID) AS QualifiedPubs
INNER JOIN Advertiser
ON QualifiedPubs.AdvertiserID = Advertiser.AdvertiserID
INNER JOIN Business
ON Advertiser.AdvertiserID = Business.BusinessID
INNER JOIN Tsheetrecipient
ON Advertiser.AdvertiserID = Tsheetrecipient.AdvertiserID
INNER JOIN AdvertiserCategoryJoin
ON Advertiser.AdvertiserID = AdvertiserCategoryJoin.AdvertiserID
LEFT OUTER JOIN AdvertiserCategory
ON AdvertiserCategoryJoin.CategoryID = AdvertiserCategory.CategoryID
ORDER BY
PubDate DESC