leisure

          JAVA - exceed,helloworld
          隨筆 - 50, 文章 - 0, 評論 - 11, 引用 - 0
          數(shù)據(jù)加載中……

          記一段mysql優(yōu)化體驗

          今天優(yōu)化了一個查詢語句,覺得蠻可以的,拿出來跟大家分享一下,為方便起見,用了三個表作為示例說明。分別有:
          tbl_commpany主要是記錄廠商的信息,包括該廠商的狀態(tài)。
          tbl_product主要是記錄產品的信息,包括產品的狀態(tài),與廠商信息表關聯(lián)。
          tbl_company_top主要記錄廠商瀏覽訪問的排行榜信息(按年)。
          tbl_company(name, status)
          tbl_product(name, company_id,status)
          tbl_company_top(company_id,rank,count,year)
          現(xiàn)在要查詢顯示:
          查詢按排行榜排序的前100個廠商列表,顯示廠商名以及廠商下有多少產品數(shù)。
          三星(1560)  HTC(581)  ……

          思路是用 tbl_company_top(廠商排名表)與 b臨時表(每個廠商對應的產品數(shù)表) 與 tbl_company表(需要根據(jù)廠商的狀態(tài)進行過濾)三表關聯(lián):
          SELECT 
            c.name, b.product_count
          FROM 
            (SELECT * FROM tbl_company_top WHERE year = 2011) a,
            (SELECT company_id, COUNT(*) AS product_count FROM tbl_product WHERE status = 1 GROUP BY company_id) b,
            tbl_company c
          WHERE 
            a.company_id = c.id
            AND b.company_id = c.id
            AND c.status = 1
          ORDER BY a.rank,a.count DESC LIMIT 50;
          查詢了一下。速度非常慢。
          以下是EXPLAIN的信息:


          按照少關聯(lián),多篩選,盡可能減少最大條數(shù)再進行關聯(lián)的原則。
          原本打算在子查詢中直接LIMIT掉50條數(shù)據(jù)。不幸的是:This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery

          SELECT 
            b.copmany_id, COUNT(b.id), a.cnt
          FROM
            (SELECT copmany_id, MAX(COUNT) AS cnt FROM tbl_company_top a WHERE year = 2011 GROUP BY copmany_id) a,
            tbl_product b,
            tbl_copmany c
          WHERE
            b.company_id = a.company_id
            AND c.id = a.company_id
            AND b.status = 1
            AND c.status = 9
            GROUP BY b.company_id, a.cnt
            ORDER BY a.cnt DESC LIMIT 50;

          EXPLAIN的信息如下:
          此時,查詢語句可以達到接受級別(當然視乎數(shù)據(jù)的級別)


          另外,給必要的查詢字段加上索引,也有不錯的效果。

          posted on 2011-10-09 12:20 leisure 閱讀(290) 評論(0)  編輯  收藏 所屬分類: database

          主站蜘蛛池模板: 南涧| 延安市| 黄山市| 德格县| 奉节县| 台江县| 苏尼特右旗| 普兰店市| 连平县| 高尔夫| 太仓市| 万年县| 云和县| 余江县| 登封市| 微山县| 电白县| 庆云县| 衡阳市| 临泉县| 盖州市| 博客| 南溪县| 襄樊市| 磐石市| 青龙| 龙里县| 含山县| 三江| 河南省| 屏东县| 商河县| 石渠县| 海原县| 南召县| 武隆县| 武胜县| 尼木县| 定结县| 自贡市| 罗平县|