婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL 百萬級數據的4種查詢優化方式

MySQL 百萬級數據的4種查詢優化方式

熱門標簽:html地圖標注并導航 400電話變更申請 催天下外呼系統 大豐地圖標注app 400電話辦理服務價格最實惠 呂梁外呼系統 南太平洋地圖標注 武漢電銷機器人電話 北京金倫外呼系統

一.limit越往后越慢的原因

當我們使用limit來對數據進行分頁操作的時,會發現:查看前幾頁的時候,發現速度非常快,比如 limit 200,25,瞬間就出來了。但是越往后,速度就越慢,特別是百萬條之后,卡到不行,那這個是什么原理呢。先看一下我們翻頁翻到后面時,查詢的sql是怎樣的:

select * from t_name where c_name1='xxx' order by c_name2 limit 2000000,25;

這種查詢的慢,其實是因為limit后面的偏移量太大導致的。比如像上面的 limit 2000000,25 ,這個等同于數據庫要掃描出 2000025條數據,然后再丟棄前面的 20000000條數據,返回剩下25條數據給用戶,這種取法明顯不合理。

二.百萬數據模擬

1、創建員工表和部門表,編寫存儲過程插數據

/*部門表,存在則進行刪除 */
drop table if EXISTS dep;
create table dep(
    id int unsigned primary key auto_increment,
    depno mediumint unsigned not null default 0,
    depname varchar(20) not null default "",
    memo varchar(200) not null default ""
);

/*員工表,存在則進行刪除*/
drop table if EXISTS emp;
create table emp(
    id int unsigned primary key auto_increment,
    empno mediumint unsigned not null default 0,
    empname varchar(20) not null default "",
    job varchar(9) not null default "",
    mgr mediumint unsigned not null default 0,
    hiredate datetime not null,
    sal decimal(7,2) not null,
    comn decimal(7,2) not null,
    depno mediumint unsigned not null default 0
);
/* 產生隨機字符串的函數*/
DELIMITER $
drop FUNCTION if EXISTS rand_string;
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
    DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmlopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    DECLARE return_str VARCHAR(255) DEFAULT '';
    DECLARE i INT DEFAULT 0;
    WHILE i  n DO
    SET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
    SET i = i+1;
    END WHILE;
    RETURN return_str;
END $
DELIMITER;


/*產生隨機部門編號的函數*/
DELIMITER $
drop FUNCTION if EXISTS rand_num;
CREATE FUNCTION rand_num() RETURNS INT(5)
BEGIN
    DECLARE i INT DEFAULT 0;
    SET i = FLOOR(100+RAND()*10);
    RETURN i;
END $
DELIMITER;
/*建立存儲過程:往emp表中插入數據*/
DELIMITER $
drop PROCEDURE if EXISTS insert_emp;
CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
BEGIN
    DECLARE i INT DEFAULT 0;
    /*set autocommit =0 把autocommit設置成0,把默認提交關閉*/
    SET autocommit = 0;
    REPEAT
    SET i = i + 1;
    INSERT INTO emp(empno,empname,job,mgr,hiredate,sal,comn,depno) VALUES ((START+i),rand_string(6),'SALEMAN',0001,now(),2000,400,rand_num());
    UNTIL i = max_num
    END REPEAT;
    COMMIT;
END $
DELIMITER;

/*建立存儲過程:往dep表中插入數據*/
DELIMITER $
drop PROCEDURE if EXISTS insert_dept;
CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
BEGIN
    DECLARE i INT DEFAULT 0;
    SET autocommit = 0;
    REPEAT
    SET i = i+1;
    INSERT  INTO dep( depno,depname,memo) VALUES((START+i),rand_string(10),rand_string(8));
    UNTIL i = max_num
    END REPEAT;
    COMMIT;
END $
DELIMITER;

2.執行存儲過程

/*插入120條數據*/
call insert_dept(1,120);
/*插入500W條數據*/
call insert_emp(0,5000000);

插入500萬條數據可能很慢

三.4種查詢方式

1.普通limit分頁

/*偏移量為100,取25*/
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno order by a.id desc limit 100,25;
/*偏移量為4800000,取25*/
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno order by a.id desc limit 4800000,25; 

執行結果

[SQL]
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno order by a.id desc limit 100,25;
受影響的行: 0
時間: 0.001s
[SQL]
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno order by a.id desc limit 4800000,25;
受影響的行: 0
時間: 12.275s

越往后,查詢效率越慢

2.使用索引覆蓋+子查詢優化

因為我們有主鍵id,并且在上面建了索引,所以可以先在索引樹中找到開始位置的 id值,再根據找到的id值查詢行數據。

/*子查詢獲取偏移100條的位置的id,在這個位置上往后取25*/
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id >= (select id from emp order by id limit 100,1)
order by a.id limit 25;

/*子查詢獲取偏移4800000條的位置的id,在這個位置上往后取25*/
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id >= (select id from emp order by id limit 4800000,1)
order by a.id limit 25;

執行結果

[SQL]
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id >= (select id from emp order by id limit 100,1)
order by a.id limit 25;
受影響的行: 0
時間: 0.106s

[SQL]
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id >= (select id from emp order by id limit 4800000,1)
order by a.id limit 25;
受影響的行: 0
時間: 1.541s

3.起始位置重定義

適用于主鍵是自增主鍵的表

/*記住了上次的分頁的最后一條數據的id是100,這邊就直接跳過100,從101開始掃描表*/
SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id > 100 order by a.id limit 25;

/*記住了上次的分頁的最后一條數據的id是4800000,這邊就直接跳過4800000,從4800001開始掃描表*/
SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id > 4800000
order by a.id limit 25;
[SQL]
SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id > 100 order by a.id limit 25;
受影響的行: 0
時間: 0.001s

[SQL]
SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id > 4800000
order by a.id limit 25;
受影響的行: 0
時間: 0.000s

這個效率是最好的,無論怎么分頁,耗時基本都是一致的,因為他執行完條件之后,都只掃描了25條數據。

4,降級策略(百度的做法)

這個策略是最簡單有效的,因為一般的大數據查詢都會有搜索條件,沒人會關注100頁以后的內容,當用戶查詢頁數過大時,給它返回一個錯誤就行了,例如百度就只能搜索到76頁

以上就是MySQL 百萬級數據的4種查詢優化方式的詳細內容,更多關于MySQL 百萬級數據查詢優化的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • mysql 數據插入優化方法之concurrent_insert
  • mysql優化之query_cache_limit參數說明
  • 如何使用分區處理MySQL的億級數據優化
  • MySQL優化之如何寫出高質量sql語句
  • 帶你快速搞定Mysql優化

標簽:迪慶 西寧 自貢 龍巖 麗水 徐州 無錫 南充

巨人網絡通訊聲明:本文標題《MySQL 百萬級數據的4種查詢優化方式》,本文關鍵詞  MySQL,百萬,級,數據,的,4種,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 百萬級數據的4種查詢優化方式》相關的同類信息!
  • 本頁收集關于MySQL 百萬級數據的4種查詢優化方式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美群妇大交群中文字幕| 亚洲与欧洲av电影| 国产精品自拍三区| 亚洲精品国产精华液| 精品国产乱码久久久久久久久| caoporm超碰国产精品| 精品一区二区三区免费观看| 亚洲裸体在线观看| 久久亚洲精精品中文字幕早川悠里 | 国产精品福利一区| 欧美性猛交一区二区三区精品| 麻豆91免费看| 亚洲va欧美va人人爽| 最近日韩中文字幕| 国产精品视频一区二区三区不卡| 欧美一区二区不卡视频| 欧美人妇做爰xxxⅹ性高电影| 99国产精品国产精品久久| 国产成人免费视频| 国产精品羞羞答答xxdd| 国产在线乱码一区二区三区| 蜜乳av一区二区| 玖玖九九国产精品| 免费成人结看片| 久久精品国产网站| 国内精品第一页| 国产黄色精品视频| 国产夫妻精品视频| 成人午夜激情视频| 波多野结衣精品在线| av中文一区二区三区| 色综合视频在线观看| 欧美色手机在线观看| 91精品婷婷国产综合久久竹菊| 在线播放日韩导航| 精品奇米国产一区二区三区| 国产免费成人在线视频| 亚洲欧美成人一区二区三区| 亚洲日本韩国一区| 日韩成人dvd| 国产成人在线免费观看| 91美女蜜桃在线| 欧美一区二区黄| 国产日韩欧美亚洲| 久久精品在线免费观看| 亚洲国产经典视频| 亚洲一区二区三区视频在线| 图片区小说区区亚洲影院| 国产亚洲人成网站| 欧美本精品男人aⅴ天堂| 欧美刺激脚交jootjob| 久久麻豆一区二区| 亚洲人快播电影网| 日本特黄久久久高潮| 国产精品1区2区3区| 欧美亚洲禁片免费| 久久久久久久久久看片| 一区二区三区中文字幕电影| 日本不卡中文字幕| 一本久道中文字幕精品亚洲嫩 | 欧美一区二区三区在线看| 久久青草欧美一区二区三区| 91亚洲午夜精品久久久久久| 日韩精品一区二区三区在线观看 | 精品国产区一区| 亚洲欧美另类久久久精品| 久久精品国产免费| 色屁屁一区二区| 国产成人亚洲精品青草天美| 久久精品国产亚洲a| 一区二区三区成人在线视频| 麻豆一区二区99久久久久| www.亚洲色图.com| 欧美va亚洲va在线观看蝴蝶网| 亚洲男人的天堂在线观看| 国产真实乱对白精彩久久| 777奇米成人网| 奇米影视一区二区三区| 成人av手机在线观看| 久久综合色综合88| 蜜桃久久av一区| 欧美日韩高清一区二区| 4hu四虎永久在线影院成人| 最好看的中文字幕久久| 国产成人综合亚洲网站| 精品久久99ma| 美国av一区二区| 欧美影院午夜播放| 亚洲欧美另类综合偷拍| 成人黄页毛片网站| 国产精品区一区二区三区 | 成人成人成人在线视频| 精品国产髙清在线看国产毛片| 香港成人在线视频| 欧美日韩国产色站一区二区三区| 综合中文字幕亚洲| 91麻豆国产在线观看| 欧美日韩一区不卡| 国产原创一区二区| www.日本不卡| 亚洲欧洲无码一区二区三区| 成人久久视频在线观看| 久久欧美中文字幕| 99精品国产热久久91蜜凸| 一道本成人在线| 椎名由奈av一区二区三区| 亚洲v精品v日韩v欧美v专区 | 欧美日免费三级在线| 亚洲风情在线资源站| 欧美日韩国产123区| 香蕉久久一区二区不卡无毒影院| 欧美日韩国产首页| 久久爱另类一区二区小说| 精品久久久久久综合日本欧美| 极品少妇xxxx偷拍精品少妇| 精品国产亚洲在线| 成人精品鲁一区一区二区| 有码一区二区三区| 欧美日韩高清一区| 国产成人午夜高潮毛片| 亚洲美女电影在线| 日韩一区二区三区免费看 | 欧美在线观看一区| 性做久久久久久免费观看| 91精品国产色综合久久不卡蜜臀 | 一区二区成人在线视频| 欧美日韩精品一区二区三区蜜桃| 免费在线成人网| 久久综合色一综合色88| 日本韩国精品一区二区在线观看| 日韩精品一级中文字幕精品视频免费观看| 日韩一区二区在线免费观看| 不卡一区二区在线| 日韩国产精品大片| 亚洲国产经典视频| 欧美一区二区三区免费视频| 成人午夜av影视| 午夜成人免费电影| 国产精品久久久久永久免费观看| 欧美自拍偷拍一区| 国产一二精品视频| 日韩精品成人一区二区在线| 国产精品久久久久毛片软件| 欧美日韩1234| 粉嫩aⅴ一区二区三区四区| 亚洲二区视频在线| 综合欧美一区二区三区| 精品日韩欧美一区二区| 欧美三电影在线| 91亚洲精品久久久蜜桃| 国产米奇在线777精品观看| 午夜精品在线视频一区| 日韩毛片在线免费观看| 久久久久97国产精华液好用吗| 欧美日韩高清一区| 在线观看日韩精品| 欧美视频一区在线观看| 91香蕉视频黄| 亚洲视频小说图片| 一区二区三区不卡视频| 国产精品久久久久三级| 精品日韩一区二区| 欧美二区乱c少妇| 欧美午夜影院一区| 92国产精品观看| 成人美女视频在线观看| 亚洲综合视频在线观看| 亚洲精品在线网站| 精品乱码亚洲一区二区不卡| 亚洲欧洲另类国产综合| 精品久久人人做人人爱| 欧美剧情片在线观看| 欧美精品久久一区二区三区| 欧美三级蜜桃2在线观看| 在线亚洲一区二区| 91美女在线视频| 91麻豆国产自产在线观看| eeuss鲁片一区二区三区| 成人午夜激情视频| 懂色av一区二区三区蜜臀| 国产成人aaa| 波多野结衣一区二区三区| 91视频www| 精品少妇一区二区三区免费观看| 色婷婷精品大视频在线蜜桃视频| 亚洲成人动漫精品| 午夜精品一区在线观看| 一区二区三区在线高清| 久久先锋资源网| 国产亚洲成aⅴ人片在线观看| 国产欧美精品在线观看| 久久久久亚洲综合| 精品国产精品一区二区夜夜嗨| 久久久久国产精品人| 中文字幕在线不卡一区二区三区 | 亚洲色欲色欲www在线观看| 久久精品亚洲精品国产欧美 | 久久精品国产一区二区| 国产福利一区二区| 欧美中文字幕亚洲一区二区va在线 |