在我的应用程序中,我的模块使用下表
从下表中我检索数据
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 数据量较大,近i百万条记录,其他表有5000条左右记录。
如果我执行上面的查询,需要超过 30 分钟才能得到结果,任何人都可以建议我编写高效的查询以在最短的时间内得到结果。
忘了具体说明,我正在使用 mysql 数据库。
通过使用“STRAIGHT_JOIN”,您可以告诉优化器按照您所说的进行操作。 我将通知 # 移至第一个 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
?, ?