<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        MySQL查詢優化:連接查詢排序limit(join、orderby、limit語句)介紹

        來源:懂視網 責編:小采 時間:2020-11-09 21:10:06
        文檔

        MySQL查詢優化:連接查詢排序limit(join、orderby、limit語句)介紹

        MySQL查詢優化:連接查詢排序limit(join、orderby、limit語句)介紹:不知道有沒有人碰到過這樣惡心的問題:兩張表連接查詢并limit,SQL效率很高,但是加上order by以后,語句的執行時間變的巨長,效率巨低。 情況是這么一個情況:現在有兩張表,team表和people表,每個people屬于一個team,people中有個字段team_i
        推薦度:
        導讀MySQL查詢優化:連接查詢排序limit(join、orderby、limit語句)介紹:不知道有沒有人碰到過這樣惡心的問題:兩張表連接查詢并limit,SQL效率很高,但是加上order by以后,語句的執行時間變的巨長,效率巨低。 情況是這么一個情況:現在有兩張表,team表和people表,每個people屬于一個team,people中有個字段team_i

        不知道有沒有人碰到過這樣惡心的問題:兩張表連接查詢并limit,SQL效率很高,但是加上order by以后,語句的執行時間變的巨長,效率巨低。

        情況是這么一個情況:現在有兩張表,team表和people表,每個people屬于一個team,people中有個字段team_id。
        下面給出建表語句:
        代碼如下:
        create table t_team
        (
        id int primary key,
        tname varchar(100)
        );
        create table t_people
        (
        id int primary key,
        pname varchar(100),
        team_id int,
        foreign key (team_id) references t_team(id)
        );

        下面我要連接兩張表查詢出前10個people,按tname排序。
        于是,一個SQL語句誕生了:select * from t_people p left join t_team t on p.team_id=t.id order by p.pname limit 10; [語句①]
        這個是我第一反應寫的SQL,通俗易懂,也是大多數人的第一反應。然后來測試一下這個語句的執行時間。首先要準備數據。我用存儲過程在t_team表中生成1000條數據,在t_people表中生成100000條數據。(存儲過程在本文最后)
        執行上面那條SQL語句,執行了好幾次,耗時在3秒左右。

        再換兩個語句對比一下:
        1.把order by子句去掉:select * from t_people p left join t_team t on p.team_id=t.id limit10; [語句②]
        耗時0.00秒,忽略不計。

        2.還是使用order by,但是把連接t_team表去掉:select * from t_people p order by p.pname limit 10; [語句③]
        耗時0.15秒左右。
        對比發現[語句①]的效率巨低。
        為什么效率這么低呢。[語句②]和[語句③]執行都很快,[語句①]不過是二者的結合。如果先執行[語句③]得到排序好的10條people結果后,再連接查詢出各個people的team,效率不會這么低。那么只有一個解釋:MySQL先執行連接查詢,再進行排序。
        解決方法:如果想提高效率,就要修改SQL語句,讓MySQL先排序取前10條再連接查詢。

        SQL語句:
        select * from (select * from t_people p order by p.pname limit 10) p left join t_team t on p.team_id=t.id limit 10; [語句④]
        [語句④]和[語句①]功能一樣,雖然有子查詢,雖然看起來很別扭,但是效率提高了很多,它的執行時間只要0.16秒左右,比之前的[語句①] (耗時3秒) 提高了20倍。
        這兩個表的結構很簡單,如果遇到復雜的表結構…我在實際開發中就碰到了這樣的問題,使用[語句①]的方式耗時80多秒,但使用[語句④]只需1秒以內。

        最后給出造數據的存儲過程:
        代碼如下:
        CREATE PROCEDURE createdata()
        BEGIN
        DECLARE i INT;
        START TRANSACTION;
        SET i=0;
        WHILE i<1000 DO
        INSERT INTO t_team VALUES(i+1,CONCAT('team',i+1));
        SET i=i+1;
        END WHILE;
        SET i=0;
        WHILE i<100000 DO
        INSERT INTO t_people VALUES(i+1,CONCAT('people',i+1),i%1000+1);
        SET i=i+1;
        END WHILE;
        COMMIT;
        END

        您可能感興趣的文章:

      1. 淺析Mysql Join語法以及性能優化
      2. MySQL優化之使用連接(join)代替子查詢
      3. 探究MySQL優化器對索引和JOIN順序的選擇
      4. MySQL中一些優化straight_join技巧
      5. MySQL中(JOIN/ORDER BY)語句的查詢過程及優化方法
      6. Mysql巧用join優化sql的方法詳解
      7. 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        MySQL查詢優化:連接查詢排序limit(join、orderby、limit語句)介紹

        MySQL查詢優化:連接查詢排序limit(join、orderby、limit語句)介紹:不知道有沒有人碰到過這樣惡心的問題:兩張表連接查詢并limit,SQL效率很高,但是加上order by以后,語句的執行時間變的巨長,效率巨低。 情況是這么一個情況:現在有兩張表,team表和people表,每個people屬于一個team,people中有個字段team_i
        推薦度:
        標簽: 效率 語句 mysql
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: a在线免费观看视频| 亚洲欧洲无码AV不卡在线| 免费一级毛suv好看的国产网站| 亚洲综合在线观看视频| 成av免费大片黄在线观看 | 国产乱辈通伦影片在线播放亚洲 | 久久久久亚洲精品中文字幕| 国产av无码专区亚洲av毛片搜| 久青草国产免费观看| 国产免费观看网站| 国产成人综合亚洲| 亚洲人成网站观看在线播放| 一个人免费观看www视频| 区久久AAA片69亚洲| 99精品视频在线视频免费观看| 日本免费中文字幕在线看| 蜜芽亚洲av无码一区二区三区| 免费的全黄一级录像带| 亚洲AV无码成人精品区天堂| 97av免费视频| 亚洲性无码AV中文字幕| 亚洲高清成人一区二区三区 | 亚洲性在线看高清h片| yellow视频免费在线观看| 国产AV无码专区亚洲AVJULIA| 在线看亚洲十八禁网站| 精品国产香蕉伊思人在线在线亚洲一区二区| 亚洲天堂视频在线观看| 成年人视频在线观看免费| 天堂亚洲免费视频| 91亚洲va在线天线va天堂va国产| 一级毛片无遮挡免费全部| 亚洲AV无码成人精品区天堂 | 久久久久亚洲av无码专区喷水| 最好2018中文免费视频| 亚洲国产精华液网站w| 2021国产精品成人免费视频| 西西人体大胆免费视频| 久久夜色精品国产噜噜噜亚洲AV| 二级毛片免费观看全程| 亚洲色图黄色小说|