亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

dense_rank()+hash提示改寫優化SQL

2024-07-21 02:46:10
字體:
來源:轉載
供稿:網友
dense_rank()+hash提示改寫優化SQL

數據庫環境:SQL SERVER 2005

今天看到一條SQL,返回10條數據,執行了50多S。剛好有空,就對它進行了優化,優化后1S出結果。

先看下原始SQL

SELECT  t1.line_no ,        MAX(sat100.confrim_date) confrim_date ,        sam63_lq.company_name ,        sat04.c_code ,        ctlm23.corr_name ,        MAX(sat04.l_date_d) l_date_d ,        SUM(sat05.qty_d_order) qty_d_order ,        sat100.tran_no_rowFROM    sat100        INNER JOIN sat101 ON sat100.com_id = sat101.com_id                             AND sat100.tran_no = sat101.tran_no                             AND sat100.tran_row = sat101.tran_row        LEFT JOIN sat05 ON sat101.com_id = sat05.com_id                           AND sat101.p_g_order_no = sat05.p_g_order_no                           AND sat101.p_g_order_line = sat05.p_g_order_line        LEFT JOIN sat04 ON sat04.com_id = sat05.com_id                           AND sat04.p_g_order_no = sat05.p_g_order_no        LEFT JOIN ctlm22 ON sat05.com_id = ctlm22.com_id                            AND sat05.item_no = ctlm22.item_no        LEFT JOIN sam63_lq ON sat100.com_id = sam63_lq.com_id                              AND sat100.company_id = sam63_lq.company_id        LEFT JOIN sam60_lq ON sat05.com_id = sam60_lq.com_id                              AND sat05.cx_item_no = sam60_lq.cx_item_no        LEFT JOIN sam65_lq ON sat100.car_no = sam65_lq.veh_no                              AND sat100.company_id = sam65_lq.company_id        LEFT JOIN ctlm17 ON sat05.com_id = ctlm17.com_id                            AND sat05.sa_unit = ctlm17.unit        LEFT JOIN salm02 ON sat04.com_id = salm02.com_id                            AND sat04.c_code = salm02.client_id        LEFT JOIN ctlm23 ON sat04.com_id = ctlm23.com_id                            AND sat04.c_code = ctlm23.corr_id        LEFT JOIN ctlm08 ON salm02.dept_id = ctlm08.dept_id        LEFT JOIN ( SELECT  ROW_NUMBER() OVER ( ORDER BY t2.tran_no_row ) line_no ,                            t2.tran_no_row                    FROM    ( SELECT  DISTINCT                                        sat100.tran_no_row                              FROM      sat100                                        INNER JOIN sat101 ON sat100.com_id = sat101.com_id                                                             AND sat100.tran_no = sat101.tran_no                                                             AND sat100.tran_row = sat101.tran_row                                        LEFT JOIN sat05 ON sat101.com_id = sat05.com_id                                                           AND sat101.p_g_order_no = sat05.p_g_order_no                                                           AND sat101.p_g_order_line = sat05.p_g_order_line                                        LEFT JOIN sat04 ON sat04.com_id = sat05.com_id                                                           AND sat04.p_g_order_no = sat05.p_g_order_no                                        LEFT JOIN ctlm22 ON sat05.com_id = ctlm22.com_id                                                            AND sat05.item_no = ctlm22.item_no                                        LEFT JOIN sam63_lq ON sat100.com_id = sam63_lq.com_id                                                              AND sat100.company_id = sam63_lq.company_id                                        LEFT JOIN sam60_lq ON sat05.com_id = sam60_lq.com_id                                                              AND sat05.cx_item_no = sam60_lq.cx_item_no                                        LEFT JOIN ctlm17 ON sat05.com_id = ctlm17.com_id                                                            AND sat05.sa_unit = ctlm17.unit                                        LEFT JOIN salm02 ON sat04.com_id = salm02.com_id                                                            AND sat04.c_code = salm02.client_id                                        LEFT JOIN ctlm23 ON sat04.com_id = ctlm23.com_id                                                            AND sat04.c_code = ctlm23.corr_id                                        LEFT JOIN ctlm08 ON salm02.dept_id = ctlm08.dept_id                              WHERE     salm02.dept_id LIKE '%'                                        AND sat100.company_id = '107'                                        AND sat100.corr_id LIKE 'A010131%'                                        AND sat04.l_date_d >= '2015/06/01 00:00:00'                                        AND sat04.l_date_d <= '2015/06/30 23:59:59'                            ) t2                  ) t1 ON sat100.tran_no_row = t1.tran_no_rowWHERE   salm02.dept_id LIKE '%'        AND sat100.company_id = '107'        AND sat100.corr_id LIKE 'A010131%'        AND sat04.l_date_d >= '2015/06/01 00:00:00'        AND sat04.l_date_d <= '2015/06/30 23:59:59'GROUP BY t1.line_no ,        sam63_lq.company_name ,        sat04.c_code ,        ctlm23.corr_name ,        sat100.tran_no_roWordER BY t1.line_no ,        sat100.tran_no_row
View Code

下面,我來說下我的優化思路:

   1.檢查SQL的寫法是否有問題

   先看下子查詢部分,發現和外部訪問的表及過濾的條件都差不多,用BeyondCompare工具檢查外部查詢和子查詢的差別,相對于外部查詢,

子查詢少訪問了一個表sam65_lq,即少了這部分內容“LEFT JOIN sam65_lq ON sat100.car_no = sam65_lq.veh_no AND sat100.company_id

= sam65_lq.company_id”,恰巧字段veh_no和字段company_id是sam65_lq的聯合主鍵,因此,這部分并沒有影響查詢的數據。

   再看下子查詢,它要實現的功能就是根據不重復的tran_no_row生成一個序號,因此,可以用dense_rank()替代子查詢實現相同的功能。同時,

sat04有過濾條件,因而可以將left join sat04改成inner join sat04。

   改寫后的SQL如下:

SELECT  line_no ,        MAX(confrim_date) confrim_date ,        company_name ,        c_code ,        corr_name ,        MAX(l_date_d) l_date_d ,        SUM(qty_d_order) qty_d_order ,        tran_no_rowFROM    ( SELECT    DENSE_RANK() OVER ( ORDER BY sat100.tran_no_row ) AS line_no ,                    sat100.confrim_date ,                    sam63_lq.company_name ,                    sat04.c_code ,                    ctlm23.corr_name ,                    sat04.l_date_d ,                    sat05.qty_d_order ,                    sat100.tran_no_row          FROM      sat100                    INNER JOIN sat101 ON sat100.com_id = sat101.com_id                                         AND sat100.tran_no = sat101.tran_no                                         AND sat100.tran_row = sat101.tran_row                    LEFT  JOIN sat05 ON sat101.com_id = sat05.com_id                                        AND sat101.p_g_order_no = sat05.p_g_order_no                                        AND sat101.p_g_order_line = sat05.p_g_order_line                    INNER JOIN sat04 ON sat04.com_id = sat05.com_id                                        AND sat04.p_g_order_no = sat05.p_g_order_no                    LEFT JOIN ctlm22 ON sat05.com_id = ctlm22.com_id                                        AND sat05.item_no = ctlm22.item_no                    LEFT JOIN sam63_lq ON sat100.com_id = sam63_lq.com_id                                          AND sat100.company_id = sam63_lq.company_id                    LEFT JOIN sam60_lq ON sat05.com_id = sam60_lq.com_id                                          AND sat05.cx_item_no = sam60_lq.cx_item_no                    LEFT JOIN sam65_lq ON sat100.car_no = sam65_lq.veh_no                                          AND sat100.company_id = sam65_lq.company_id                    LEFT JOIN ctlm17 ON sat05.com_id = ctlm17.com_id                                        AND sat0
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品美女视频网站| 在线不卡国产精品| 日韩在线观看电影| www.午夜精品| 亚洲人成网站免费播放| 中文精品99久久国产香蕉| 成人黄色短视频在线观看| 欧美成人免费va影院高清| 成人免费自拍视频| 在线亚洲欧美视频| 欧美性xxxx极品hd欧美风情| 激情成人在线视频| 色婷婷亚洲mv天堂mv在影片| 国产视频一区在线| 夜夜躁日日躁狠狠久久88av| 欧美成在线视频| 欧洲亚洲在线视频| 日本乱人伦a精品| 激情成人在线视频| 国产在线拍揄自揄视频不卡99| 亚洲精品欧美一区二区三区| www.久久撸.com| www.日本久久久久com.| 在线视频免费一区二区| 欧美肥老太性生活视频| 午夜剧场成人观在线视频免费观看| 欧美黑人一级爽快片淫片高清| 日本精品免费观看| 亚洲在线第一页| xvideos亚洲| 丝袜亚洲另类欧美重口| 国产精品国产三级国产专播精品人| 色无极影院亚洲| 精品国产欧美一区二区五十路| 中文字幕av一区| 午夜精品三级视频福利| 久久人人爽人人| 在线日韩精品视频| 日韩最新中文字幕电影免费看| 日韩av网站电影| 精品国内亚洲在观看18黄| 91中文字幕一区| 国产婷婷97碰碰久久人人蜜臀| 久久久久久国产免费| 亚洲少妇中文在线| 亚洲天天在线日亚洲洲精| 国产福利精品av综合导导航| 亚洲伊人久久大香线蕉av| 日韩高清有码在线| 亚洲自拍小视频| 高清一区二区三区四区五区| 精品视频www| 久久精品久久久久久国产 免费| 91精品视频在线免费观看| 韩曰欧美视频免费观看| 亚洲色图35p| 国产91精品久| 国产一区二区三区在线播放免费观看| 色综合久久88色综合天天看泰| 久久精品国产欧美激情| 日韩av成人在线| 日韩一区二区久久久| 色悠悠久久久久| 国产激情综合五月久久| 国产精品九九久久久久久久| 国产精品视频精品视频| 亚洲精品网址在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 久久免费观看视频| 亚洲午夜未删减在线观看| 久久在线观看视频| 亚洲在线免费视频| 日韩精品视频免费专区在线播放| 国产精品电影在线观看| 国产精品日韩在线| 欧美精品18videos性欧| 福利视频一区二区| 国产精品专区h在线观看| 琪琪第一精品导航| 有码中文亚洲精品| 91av网站在线播放| 国内精品久久影院| 亚洲福利在线观看| 日本一区二区在线免费播放| 亚洲第一视频在线观看| 日韩中文字幕精品视频| 精品无人区乱码1区2区3区在线| 国产91色在线播放| 日韩最新在线视频| 欧美视频中文在线看| 68精品国产免费久久久久久婷婷| 日韩精品欧美国产精品忘忧草| 伊人久久久久久久久久久久久| 国产精品吴梦梦| 精品欧美aⅴ在线网站| 黄网站色欧美视频| 欧美大全免费观看电视剧大泉洋| 日韩精品在线视频观看| 在线丨暗呦小u女国产精品| 国产美女精品免费电影| 深夜福利日韩在线看| 久久在线视频在线| 蜜臀久久99精品久久久无需会员| 欧洲一区二区视频| 国产精品久久久久久久久久| 欧美制服第一页| 日韩精品在线观看一区二区| 国产精品久久久久久久久久久久久久| 国产福利成人在线| 成人淫片在线看| 国产一区av在线| 国产成人精品综合久久久| 久久久久久久久91| 91精品久久久久| 欧美性感美女h网站在线观看免费| 欧美成人免费小视频| 欧美极品xxxx| 中文字幕亚洲欧美一区二区三区| 91a在线视频| 97国产在线观看| 欧美性xxxx18| 日本午夜精品理论片a级appf发布| 日韩精品在线免费观看视频| 成人国产精品久久久| 色777狠狠综合秋免鲁丝| 亚洲国产又黄又爽女人高潮的| 日韩精品在线观| 久久久999国产| 亚洲成成品网站| 欧美在线亚洲在线| 亚洲黄色成人网| 久久久免费高清电视剧观看| 91在线|亚洲| 亚洲风情亚aⅴ在线发布| 亚洲精品久久久久中文字幕欢迎你| 日韩中文在线视频| 国产成+人+综合+亚洲欧美丁香花| 国产精品91免费在线| 亚洲aaa激情| 日韩欧美国产激情| 色伦专区97中文字幕| 久久亚洲精品成人| 91天堂在线观看| 中国人与牲禽动交精品| 精品视频www| 久久精品国产精品亚洲| 性欧美在线看片a免费观看| 亚洲人免费视频| 26uuu另类亚洲欧美日本一| 97精品欧美一区二区三区| 亚洲人成电影网站色www| 中文字幕亚洲综合久久筱田步美| 国产乱人伦真实精品视频| 狠狠操狠狠色综合网| 亚洲已满18点击进入在线看片| 91精品国产91久久久久久久久| 九九热精品视频国产| 欧美性xxxx极品hd欧美风情| 国产亚洲欧美日韩美女| 久久91精品国产91久久久| 亚洲欧美三级在线| 亚洲激情电影中文字幕| 中文字幕精品久久| 成人黄色片在线|