2010-02-22 225 views
2

在我的申请,我的模块使用下表查询优化

  1. PUBLIC_APPLICATION
  2. CATEGORY_MASTER
  3. NOTIFICATION_SITE_DETAIL
  4. DIMENSION_MASTER DM
  5. PUBLIC_REGISTRATION
  6. ALLOTMENT_NOTIFICATION。

从下面的表格,我检索数据

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有大量的数据,近1百的记录和其他表有大约5000条记录。

如果我执行上述查询需要超过30分钟才能得到结果,任何人都可以建议我写出高效的查询以在最短时间内得到结果。

忘了指定,我正在使用mysql数据库。

+0

那么,查询是否适合您? – DRapp 2010-02-23 00:45:54

+0

工作效率很高,时间从30分钟减少到1分钟。非常感谢 – gmhk 2010-02-23 07:30:16

回答

4

通过使用“STRAIGHT_JOIN”,您可以告诉优化器按照您的说法进行操作。 我将通知#作为第一个WHERE子句移动,因此首先处理它以限制您的设置。那么,我将连接设置到其他表中。在此之前,我查询了超过1500万条记录的数据,并加入了15个以上的表格,耗时20多个小时。通过在我已经格式良好的查询中添加“STRAIGHT_JOIN”,它花费了大约2个小时......再次获得了超过1,500万条记录,并加入了超过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 
     ?, ? 
+1

铁杆...辉煌! ;) – pixeline 2010-02-22 17:27:29

+0

让我试试这个,谢谢你的建议 – gmhk 2010-02-22 17:28:42

+0

它工作的很好,时间从30分钟减少到1分钟。非常感谢 – gmhk 2010-02-23 07:30:01