校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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種查詢優化方式的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产精品不卡视频| 欧美一区二区视频在线观看2020| 粉嫩欧美一区二区三区高清影视| 91久久免费观看| 91精品久久久久久蜜臀| 国产色一区二区| 五月天一区二区| 丰满亚洲少妇av| 欧美日本一区二区| 自拍偷拍欧美激情| 美女视频一区二区| 欧美人妇做爰xxxⅹ性高电影| 日韩免费成人网| 亚洲精品国久久99热| 精品写真视频在线观看| 国产一区在线视频| 日韩三级伦理片妻子的秘密按摩| 最新国产成人在线观看| 国产麻豆精品在线| 8x8x8国产精品| 国产精品三级电影| 久久狠狠亚洲综合| 欧美日韩免费一区二区三区| 亚洲欧美另类图片小说| 国产又粗又猛又爽又黄91精品| 欧美一区二区视频在线观看2022| 亚洲日本青草视频在线怡红院 | 亚洲一区电影777| 国产精品1区2区3区在线观看| 欧美系列一区二区| 亚洲国产日产av| 91麻豆国产精品久久| 久久婷婷综合激情| 国产精品久久久久7777按摩| 老司机精品视频线观看86| 日韩视频免费直播| 视频一区欧美日韩| 成人免费视频国产在线观看| 国产午夜精品一区二区三区视频 | 亚洲一区二区三区四区五区中文 | 亚洲成精国产精品女| 成人免费看片app下载| 国产清纯白嫩初高生在线观看91 | 日韩欧美亚洲一区二区| 蜜臀av性久久久久蜜臀av麻豆| 欧美视频在线播放| 麻豆免费看一区二区三区| 欧美日韩精品一区二区天天拍小说| 亚洲国产美国国产综合一区二区| gogo大胆日本视频一区| 国产精品天美传媒沈樵| 91蝌蚪国产九色| 亚洲精品乱码久久久久久黑人| 欧美最新大片在线看 | aaa亚洲精品| 日韩精品一区二区三区视频| 久久精品99国产精品日本| 日韩色在线观看| 成人av网址在线观看| 中文字幕人成不卡一区| 欧美日韩一区二区在线观看视频 | 精品福利视频一区二区三区| 国产在线麻豆精品观看| 亚洲欧美综合另类在线卡通| 色激情天天射综合网| 亚洲18影院在线观看| 91精品欧美综合在线观看最新| 日韩中文字幕区一区有砖一区| 欧美日韩亚洲综合一区| 依依成人精品视频| 在线成人av网站| 狠狠色丁香婷婷综合久久片| 亚洲欧洲精品一区二区三区| 色婷婷av一区| 亚洲国产成人高清精品| 欧美不卡一区二区三区四区| 狠狠色丁香婷综合久久| 亚洲尤物视频在线| 精品国产污网站| 日本高清不卡视频| 青青草成人在线观看| 国产网红主播福利一区二区| aa级大片欧美| 日本欧美一区二区在线观看| 国产精品国产三级国产有无不卡| 欧美综合天天夜夜久久| 成人午夜激情片| 日韩精品1区2区3区| 2020国产精品| 在线免费观看日本一区| 狠狠色狠狠色综合| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品一区二区三区蜜桃下载| 欧美日韩精品系列| 成人综合在线视频| 国产一区二区在线观看视频| 亚洲狠狠丁香婷婷综合久久久| 欧美电影免费观看高清完整版| 欧美在线观看视频一区二区| 国产乱码精品一区二区三区忘忧草| 亚洲成人动漫在线观看| 国产精品久久久久影院亚瑟| 欧美成人a在线| 欧美三区免费完整视频在线观看| 国内不卡的二区三区中文字幕 | 国产乱子伦一区二区三区国色天香| 亚洲欧美日韩在线播放| 国产精品福利av| 欧美精品一区二区三区视频| 欧美成人女星排行榜| 色爱区综合激月婷婷| 色综合中文字幕| 国产精品88av| 亚洲精品va在线观看| 自拍偷在线精品自拍偷无码专区| 精品粉嫩aⅴ一区二区三区四区| 日韩精品一区国产麻豆| 亚洲精品一线二线三线无人区| 国产一区视频网站| 国产曰批免费观看久久久| 免费成人在线观看| 国内精品写真在线观看| 欧美aaaaaa午夜精品| 久久精品噜噜噜成人88aⅴ| 亚洲午夜av在线| 欧美一级精品在线| 久久久综合网站| 精品国产乱码久久久久久蜜臀 | 成人午夜免费视频| 国产精品综合久久| www.成人网.com| 色老头久久综合| 91精品国产色综合久久ai换脸| 欧美日韩视频不卡| 精品少妇一区二区三区在线视频| 欧美一区二区女人| 欧美一区二区三区在线观看| 9191久久久久久久久久久| 欧美情侣在线播放| 久久久亚洲精品一区二区三区| 2024国产精品视频| 一区二区免费视频| 亚洲国产精品久久久久秋霞影院| 老司机免费视频一区二区三区| 日韩精品成人一区二区三区| 韩国三级电影一区二区| 丁香婷婷综合五月| 99精品国产99久久久久久白柏 | 666欧美在线视频| 日韩亚洲欧美一区二区三区| 91福利国产精品| 在线一区二区三区| 正在播放一区二区| 精品少妇一区二区三区在线播放| 国产精品欧美久久久久无广告 | 韩国三级中文字幕hd久久精品| 久久99九九99精品| 国产在线精品免费| 天天影视色香欲综合网老头| 丝袜诱惑亚洲看片| 成人av高清在线| 欧美三片在线视频观看| 久久久国产精品午夜一区ai换脸| 亚洲日本在线a| 免费人成精品欧美精品| 不卡一二三区首页| 91成人在线观看喷潮| 久久精品日产第一区二区三区高清版| 国产精品三级在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚欧色一区w666天堂| 狠狠色丁香婷婷综合久久片| 欧美午夜不卡在线观看免费| 日韩丝袜美女视频| 国产婷婷色一区二区三区四区 | 9久草视频在线视频精品| 欧美性一级生活| 成人免费在线播放视频| 婷婷综合五月天| 中文字幕精品三区| 久久av资源站| 久久久美女艺术照精彩视频福利播放| 亚洲乱码日产精品bd| 成人午夜精品在线| 国产精品三级视频| 日本欧美一区二区在线观看| 337p亚洲精品色噜噜噜| 欧美一区二区三区视频免费| 欧美极品少妇xxxxⅹ高跟鞋| 97久久久精品综合88久久| 久久久久国产精品免费免费搜索| av不卡免费电影| 91视频一区二区三区| www.亚洲免费av| jlzzjlzz欧美大全| 美女视频黄 久久| 亚洲成精国产精品女| xnxx国产精品| 精品在线一区二区| 国产清纯在线一区二区www|