在我的应用程序中,我的模块使用以下表
从下表中检索数据
SELECT PA.REGISTRATION_NO,PA.APP_ID,PA.NO_OF_ATTEMPTS,CM.CATEGORY_NAME,
DM.SITE_DIMENSION,PR.BDA_NO,AN.NOTIFY_ID
FROM **PUBLIC_APPLICATION PA,CATEGORY_MASTER CM,NOTIFICATION_SITE_DETAIL NSD,DIMENSION_MASTER DM, PUBLIC_REGISTRATION PR,ALLOTMENT_NOTIFICATION AN**
WHERE **CM.CATEGORY_ID = PA.CATEGORY_ID AND
NSD.NOTIFY_SITE_ID = PR.NOTIFY_SITE_ID AND
DM.DIMENSION_ID = NSD.DIMENSION_ID AND
PR.REGISTRATION_NO = PA.REGISTRATION_NO AND
AN.NOTIFICATION_NO = PA.NOTIFICATION_NO AND
PR.NOTIFY_SITE_ID = PA.NOTIFY_SITE_ID AND NSD.NOTIFY_ID = AN.NOTIFY_ID AND
PA.NOTIFICATION_NO = ?** LIMIT ?, ?PUBLIC_APPLICATION & PUBLIC_REGISTRATION拥有大量的数据,近百万条记录和其他表大约有5000条记录。
如果我执行以上的查询,它需要超过30分钟才能得到结果,谁能建议我写有效的查询,以便在最短的时间内得到结果。
忘记指定,我正为此使用mysql数据库。
发布于 2010-02-22 17:23:27
通过使用"STRAIGHT_JOIN",您可以告诉优化器按您说的那样做。我将Notification#移动为第一个WHERE子句,以便首先处理它以限制您的集合。然后,我将联接设置为其他表。我以前在查询15+百万条记录的政府数据以加入15+表时也有过这种情况,这花费了20+几个小时。仅在我的格式良好的查询中添加"STRAIGHT_JOIN“,大约花了2个小时.同样,15+百万记录并连接到超过15个表以获得子描述详细信息。
SELECT STRAIGHT_JOIN
PA.REGISTRATION_NO,
PA.APP_ID,
PA.NO_OF_ATTEMPTS,
CM.CATEGORY_NAME,
DM.SITE_DIMENSION,
PR.BDA_NO,
AN.NOTIFY_ID
FROM
PUBLIC_APPLICATION PA,
CATEGORY_MASTER CM,
NOTIFICATION_SITE_DETAIL NSD,
DIMENSION_MASTER DM,
PUBLIC_REGISTRATION PR,
ALLOTMENT_NOTIFICATION AN
WHERE
PA.NOTIFICATION_NO = ?
AND PA.CATEGORY_ID = CM.CATEGORY_ID
AND PA.REGISTRATION_NO = PR.REGISTRATION_NO
AND PA.NOTIFICATION_NO = AN.NOTIFICATION_NO
AND PA.NOTIFY_SITE_ID = PR.NOTIFY_SITE_ID
AND PR.NOTIFY_SITE_ID = NSD.NOTIFY_SITE_ID
AND NSD.DIMENSION_ID = DM.DIMENSION_ID
AND NSD.NOTIFY_ID = AN.NOTIFY_ID
LIMIT
?, ?https://stackoverflow.com/questions/2312608
复制相似问题