SELECT tm.MAGAZINE_ID, tm.publisher_id, tu.begin_date, tu.report_from,
units `MAGAZINE_NAME`
FROM `tbl_itunes_report` tu
LEFT JOIN tbl_magazine_subscription_dtl tsd
ON tsd.subscription_key = tu.sku_key
AND ((tu.begin_date >= tsd.start_date
AND tu.begin_date < tsd.end_date) OR (tu.begin_date >= tsd.start_date
AND tsd.end_date = '0000-00-00'))
LEFT JOIN tbl_magazine_subscription ts
ON ts.magazine_subscription_id = tsd.subs_id
LEFT JOIN tbl_magazine_issue ti
ON ti.PurchaseKey = tu.sku_key AND ti.OS_SELECT = 0
LEFT JOIN tbl_magazine tm
ON tm.magazine_id = ts.magazine_id OR tm.magazine_id = ti.magazine_id
WHERE `product_type_identifier` LIKE 'IA%'
AND (tsd.subscription_key IS NOT NULL OR ti.PurchaseKey IS NOT NULL)
GROUP BY tm.MAGAZINE_ID,tsd.no_of_issues
ORDER BY tm.magazine_name, tsd.no_of_issues
Используя этот запрос, я создам свой отчет. В нем 4 объединения. В случае tbl_magazine_subscription_dtl
, tbl_magazine_issue
использует поле sku_key
для соединения. Значение sku_key
присутствует только в одной таблице за раз, но соединение приведет к уменьшению скорости запроса. Можно ли проверить, присутствует ли sku_key
или нет до того, как будет выполнено соединение?если условие для запроса присоединения
Обе таблицы указаны на sku_key? Я не считаю, что соединение должно снизить производительность, поскольку первая проверка, в которой содержится таблица sku_key, также занимает много времени – Brendan
tbl_magazine_subscription_dtl - tbl_magazine_issue отнимает много времени. –
, потому что только один имеет эквивалентность sku_key, тогда он принимает все данные из таблицы. если возможно, sku_key присутствует в соответствующей таблице, прежде чем присоединяться к ней –