我有七个表,当我执行下面的sql查询时,需要很长时间来处理查询,并且在执行此操作时系统挂起。
SELECT DISTINCT
M.MerchantId,
M.MerchantName,
M.Image
FROM
CCodes as CC,
Merchants as M,
MemberStores as MS,
MemberCategories as MC,
Categories as C,
MembersLogin as ML,
CategoryAndMerchant as CM
WHERE
(
(
M.MerchantId = MS.MerchantId
AND MS.MemberId = ML.Id
)
OR
(
ML.Id = MC.MemberId
AND MC.CategoryId = C.Id
AND C.Id = CM.CategoryId
AND CM.MerchantId = M.MerchantId
AND CC.MerchantId = M.MerchantId
)
)
AND CC.Status = 1
AND M.Status = 1
AND C.Status = 1
AND CC.Status = 1
AND EndDate BETWEEN '$todaysDate' AND '$endDate'
AND ML.Id = $id
ORDER BY EndDate asc 您可以假设$todaysDate、$endDate和$id的任何值。
请帮助我优化查询,以便尽可能减少执行时间。
发布于 2013-08-22 21:39:13
我注意到您只打印有关表Merchants的信息。因此,另一个表改为应用联接,尝试使用带有not exists / exists as条件的子查询。添加一些索引,例如,在字段date上添加EndDate。
为什么你放了两次
AND CC.Status = 1听完这些建议后,请告诉我是否可以
https://stackoverflow.com/questions/13109514
复制相似问题