首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询优化

查询优化
EN

Stack Overflow用户
提问于 2010-02-22 17:07:43
回答 1查看 143关注 0票数 2

在我的应用程序中,我的模块使用以下表

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

从下表中检索数据

代码语言:javascript
复制
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数据库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-22 17:23:27

通过使用"STRAIGHT_JOIN",您可以告诉优化器按您说的那样做。我将Notification#移动为第一个WHERE子句,以便首先处理它以限制您的集合。然后,我将联接设置为其他表。我以前在查询15+百万条记录的政府数据以加入15+表时也有过这种情况,这花费了20+几个小时。仅在我的格式良好的查询中添加"STRAIGHT_JOIN“,大约花了2个小时.同样,15+百万记录并连接到超过15个表以获得子描述详细信息。

代码语言:javascript
复制
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 
        ?, ?
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2312608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档