精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL查詢,是 join性能好,還是in一下更快呢?

數(shù)據(jù)庫 MySQL
當(dāng)數(shù)據(jù)量小時(shí),可能一頁數(shù)據(jù)就夠放的時(shí)候,join的成本和速度都更好。數(shù)據(jù)量大的時(shí)候確實(shí)分開查的成本更低,但是由于數(shù)據(jù)量大,造成循環(huán)的成本更多,代碼執(zhí)行的時(shí)間也就越長。

先總結(jié):

  1. 數(shù)據(jù)量小的時(shí)候,用join更劃算
  2. 數(shù)據(jù)量大的時(shí)候,join的成本更高,但相對來說join的速度會更快
  3. 數(shù)據(jù)量過大的時(shí)候,in的數(shù)據(jù)量過多,會有無法執(zhí)行SQL的問題,待解決

事情是這樣的,在一次代碼review的時(shí)候有同學(xué)提出說,不要寫join,join耗性能還是慢來著,當(dāng)時(shí)也是真的沒有多想,那就寫in好了,最近發(fā)現(xiàn)in的數(shù)據(jù)量過大的時(shí)候會導(dǎo)致sql慢,甚至sql太長,直接報(bào)錯了。

這次來淺究一下,到底是in好還是join好,僅目前認(rèn)知探尋,有不對之處歡迎指正

以下實(shí)驗(yàn)僅在本機(jī)電腦試驗(yàn)。

一、表結(jié)構(gòu)

1、用戶表

圖片圖片

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名',
  `gender` smallint DEFAULT NULL COMMENT '性別',
  `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '手機(jī)號',
  `create_time` datetime NOT NULL COMMENT '創(chuàng)建時(shí)間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `mobile` (`mobile`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1005 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

2、訂單表

圖片圖片

CREATE TABLE `order` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `price` decimal(18,2) NOT NULL,
  `user_id` int NOT NULL,
  `product_id` int NOT NULL,
  `status` smallint NOT NULL DEFAULT '0' COMMENT '訂單狀態(tài)',
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `product_id` (`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=202 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

二、先來試少量數(shù)據(jù)的情況

用戶表插一千條隨機(jī)生成的數(shù)據(jù),訂單表插一百條隨機(jī)數(shù)據(jù)

查下所有的訂單以及訂單對應(yīng)的用戶

下面從三個(gè)維度來看

多表連接查詢成本 = 一次驅(qū)動表成本 + 從驅(qū)動表查出的記錄數(shù) * 一次被驅(qū)動表的成本

1、join

JOIN:

explain format=json select order.id, price, user.`name` from `order` join user on order.user_id = user.id;

子查詢:

select order.id,price,user.`name` from `order`,user where user_id=user.id;

圖片圖片

2、分開查

select `id`,price,user_id from `order`;

圖片圖片

select name from user where id in (8, 11, 20, 32, 49, 58, 64, 67, 97, 105, 113, 118, 129, 173, 179, 181, 210, 213, 215, 216, 224, 243, 244, 251, 280, 309, 319, 321, 336, 342, 344, 349, 353, 358, 363, 367, 374, 377, 380, 417, 418, 420, 435, 447, 449, 452, 454, 459, 461, 472, 480, 487, 498, 499, 515, 525, 525, 531, 564, 566, 580, 584, 586, 592, 595, 610, 633, 635, 640, 652, 658, 668, 674, 685, 687, 701, 718, 720, 733, 739, 745, 751, 758, 770, 771, 780, 806, 834, 841, 856, 856, 857, 858, 882, 934, 942, 983, 989, 994, 995);  \[in的是order查出來的所有用戶id\]

圖片圖片

如此看來,分開查和join查的成本并沒有相差許多

3、代碼層面

主要用php原生寫了腳本,用ab進(jìn)行10個(gè)同時(shí)的請求,看下時(shí)間,進(jìn)行比較

ab -n 100 -c 10

in

$mysqli = new mysqli('127.0.0.1', 'root', 'root', 'test');
 if ($mysqli->connect_error) {
     die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
 }

 $result = $mysqli->query('select `id`,price,user_id from `order`');
 $orders = $result->fetch_all(MYSQLI_ASSOC);

 $userIds = implode(',', array_column($orders, 'user_id')); // 獲取訂單中的用戶id
 $result = $mysqli->query("select `id`,`name` from `user` where id in ({$userIds})");
 $users = $result->fetch_all(MYSQLI_ASSOC);// 獲取這些用戶的姓名

 // 將id做數(shù)組鍵
 $userRes = [];
 foreach ($users as $user) {
     $userRes[$user['id']] = $user['name'];
 }

 $res = [];
 // 整合數(shù)據(jù)
 foreach ($orders as $order) {
     $current = [];
     $current['id'] = $order['id'];
     $current['price'] = $order['price'];
     $current['name'] = $userRes[$order['user_id']] ?: '';
     $res[] = $current;
 }
 var_dump($res);

 // 關(guān)閉mysql連接

 $mysqli->close();

圖片圖片

join

$mysqli = new mysqli('127.0.0.1', 'root', 'root', 'test');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

$result = $mysqli->query('select order.id, price, user.`name` from `order` join user on order.user_id = user.id;');
$orders = $result->fetch_all(MYSQLI_ASSOC);

var_dump($orders);
$mysqli->close();

圖片圖片

看時(shí)間的話,明顯join更快一些

三、試下多一些數(shù)據(jù)的情況

user表現(xiàn)在10000條數(shù)據(jù),order表10000條,試下

1、join

圖片圖片

2、分開

order

圖片圖片

user

圖片圖片

3、代碼層面

in

圖片圖片

join

圖片圖片

三、試下多一些數(shù)據(jù)的情況

隨機(jī)插入后user表十萬條數(shù)據(jù),order表一百萬條試下

1、join

圖片圖片

2、分開

order

圖片圖片

user

order查出來的結(jié)果過長了,,,

3、代碼層面

in

圖片圖片

join

圖片圖片

四、到底怎么才能更好

注:對于本機(jī)來說100000條數(shù)據(jù)不少了,更大的數(shù)據(jù)量害怕電腦卡死

總的來說,當(dāng)數(shù)據(jù)量小時(shí),可能一頁數(shù)據(jù)就夠放的時(shí)候,join的成本和速度都更好。數(shù)據(jù)量大的時(shí)候確實(shí)分開查的成本更低,但是由于數(shù)據(jù)量大,造成循環(huán)的成本更多,代碼執(zhí)行的時(shí)間也就越長。

實(shí)驗(yàn)過程中發(fā)現(xiàn),當(dāng)in的數(shù)據(jù)量過大的時(shí)候,sql過長會無法執(zhí)行,可能還要拆開多條sql進(jìn)行查詢,這樣的查詢成本和時(shí)間一定也會更長,而且如果有分頁的需求的話,也無法滿足。。。

感覺這兩個(gè)方法都不是太好,各位小伙伴,有沒有更好的方法呢?

責(zé)任編輯:武曉燕 來源: 架構(gòu)精進(jìn)之路
相關(guān)推薦

2023-11-16 12:34:00

MySQLjoin

2018-08-20 15:00:32

Linux深度操作系統(tǒng)發(fā)行版

2021-11-09 08:57:13

元宇宙VR平行時(shí)空

2021-08-10 11:09:06

Linux壓縮神器命令

2021-04-27 07:52:18

SQLNULLOR

2018-10-09 15:26:19

JavaPython語言

2018-09-26 14:17:00

編程語言JavaPython

2023-06-20 12:02:39

WhileFor(;;)

2022-05-05 09:31:58

JOIN數(shù)據(jù)庫

2011-04-14 09:42:06

DataReaderDataSet

2011-10-12 11:07:12

iCloudiOS5蘋果

2020-04-06 14:50:43

MySQLSQL數(shù)據(jù)庫

2024-09-03 10:56:49

線程AQS

2023-08-18 20:50:22

2025-01-15 08:05:06

MySQLLEFT JOIN數(shù)據(jù)庫

2016-07-08 14:26:55

云計(jì)算

2023-06-05 14:14:21

騰訊索引面試

2016-12-06 09:12:07

Java程序員

2025-03-10 07:05:07

2020-09-10 18:47:54

區(qū)塊鏈
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

九九九九九国产| 亚洲 国产 日韩 综合一区| 日本三级片在线观看| 欧美三级电影在线| 欧美在线|欧美| 日韩中文字幕av在线| 国产精品一区二区av白丝下载| 日韩精品一区二区久久| 日韩免费高清视频| 国产日韩一区二区在线观看| 福利视频在线看| 国产成人在线影院 | 日本二区在线观看| 99综合久久| 精品久久中文字幕| 丰满女人性猛交| 午夜视频福利在线| 国产一区二区免费在线| 日本成人免费在线| www青青草原| jiujiure精品视频播放| 精品国产乱码久久久久久免费| 国产一级做a爰片久久| av女在线播放| 亚洲欧美乱综合| 日韩亚洲视频在线| 黄色小视频免费观看| 精品一区二区三区欧美| 国产成人精品一区二区| 国产无码精品一区二区| 希岛爱理一区二区三区| 一本色道久久综合狠狠躁篇怎么玩| 日日夜夜精品视频免费观看| 99re66热这里只有精品4| 午夜精品久久一牛影视| 一二三四中文字幕| 麻豆视频网站在线观看| 国产亚洲精品免费| 蜜桃导航-精品导航| 欧美一区二区三区激情| 国产精品一区二区久久精品爱涩| 国产美女直播视频一区| 国产午夜无码视频在线观看| 亚洲欧美日韩精品一区二区| 久久久久久久成人| 欧美精品成人久久| 欧美午夜不卡| 欧美黑人狂野猛交老妇| 欧美成人精品欧美一级| 久久久久久久久丰满| 日韩中文字幕av| 纪美影视在线观看电视版使用方法| 欧美女优在线视频| 亚洲欧美日韩直播| 免费看黄色三级| 日韩精品一卡| 久久精品人人爽| 顶臀精品视频www| 欧美一区亚洲| 欧美成人亚洲成人| 久久视频免费看| 韩日欧美一区| 97国产精品视频| 国产无套丰满白嫩对白| 性欧美videos另类喷潮| 日韩免费精品视频| 最新在线中文字幕| 精品一区二区在线观看| 97免费高清电视剧观看| 狠狠躁夜夜躁av无码中文幕| jiyouzz国产精品久久| 久久久久久久久一区二区| 视频二区在线| 国产日韩影视精品| 中文字幕剧情在线观看一区| 污污的网站在线看| 欧美日韩激情视频8区| 日韩免费毛片视频| 国产亚洲精品精品国产亚洲综合| 69堂成人精品免费视频| 亚洲av无码一区东京热久久| 欧美综合精品| 中文字幕日韩欧美在线| 欧美在线视频第一页| 亚洲视频免费| 欧美最猛性xxxx| 国产精品国产av| 国产精品888| 久久99精品久久久水蜜桃| 免费在线超碰| 亚洲免费成人av| 久久国产乱子伦免费精品| 91精品麻豆| 亚洲国产精品va在线观看黑人| 国产亚洲精品熟女国产成人| 希岛爱理一区二区三区| 欧洲成人在线观看| 99在线精品视频免费观看20| 2024国产精品视频| 26uuu成人| 手机在线观看av| 欧美性猛片xxxx免费看久爱| 在线观看欧美一区二区| 欧美日本成人| 久久久久九九九九| 中文字幕永久在线视频| 成人sese在线| 欧美aaa在线观看| 欧美成人黑人| 欧美一区二区三区日韩视频| 国产精品亚洲无码| 欧美人成网站| 国产伦精品一区二区三区精品视频| 天堂在线资源库| 亚洲免费观看高清完整版在线观看 | 国产对白叫床清晰在线播放| 亚洲一区二区视频在线观看| 午夜精品中文字幕| 综合亚洲自拍| 欧美激情免费视频| 91肉色超薄丝袜脚交一区二区| 99视频一区二区| 超碰10000| www.成人在线.com| 最近2019好看的中文字幕免费| 日本熟女一区二区| 国产福利一区二区三区| 影音先锋欧美资源| 精品视频在线一区二区在线| 亚洲精品资源在线| 国产精品6666| 成人激情综合网站| 天堂av在线中文| 日韩成人综合网站| 国产午夜精品一区理论片飘花| 久久露脸国语精品国产91| 国产很黄免费观看久久| 99精品一区二区三区的区别| 成人精品一区二区三区电影| 亚洲午夜精品视频| 四虎影院在线免费播放| 久久在线免费观看| 黄色一级片播放| 欧美美女在线直播| 91精品国产自产91精品| 色噜噜一区二区三区| 亚洲国产日韩精品| 亚洲天堂美女视频| 亚洲深夜影院| 欧美日本国产精品| 深夜成人福利| 一本色道久久88精品综合| 欧美日韩a v| 久久久99精品免费观看不卡| 成人免费无码av| 国产伦一区二区三区| 国产激情久久久| av一本在线| 欧美日韩一区国产| 91传媒免费观看| 国产不卡一区视频| 欧美午夜小视频| 偷拍自拍亚洲色图| 国产精品久久久久免费a∨大胸| av在线免费播放网站| 欧美日韩激情在线| 欧美黄片一区二区三区| av高清久久久| 亚洲视频在线观看一区二区三区| 波多野结衣在线播放一区| 成人欧美一区二区三区黑人| 日本性爱视频在线观看| 日韩精品中文字幕视频在线| 在线视频精品免费| 综合色天天鬼久久鬼色| 97精品人妻一区二区三区蜜桃| 国产手机视频一区二区| 天堂精品一区二区三区| 国产精品3区| 97视频在线观看播放| 国产有码在线| 日韩一区国产二区欧美三区| 你懂的国产视频| 国产精品情趣视频| 亚洲欧美综合视频| 日韩在线一二三区| 国产激情片在线观看| 久久精品国产亚洲5555| 国产精品美女久久久久av超清| 国产精品一区二区三区视频网站| 精品国产乱码91久久久久久网站| 成人免费毛片男人用品| 成人免费一区二区三区视频| 精品影片一区二区入口| 日本大胆欧美人术艺术动态| 久操手机在线视频| 色97色成人| 狠狠干一区二区| 色综合一区二区日本韩国亚洲| 国语自产在线不卡| 美女羞羞视频在线观看| 日韩电影在线观看中文字幕| 国产精品爽爽久久| 日韩欧美国产一区二区| 青青草手机在线观看| 国产三级一区二区三区| 日本在线不卡一区二区| 美女视频一区在线观看| 欧美深夜福利视频| 欧美一区久久| 亚洲制服欧美久久| 一区二区三区韩国免费中文网站| 91久久极品少妇xxxxⅹ软件| 成人网ww555视频免费看| 91av视频在线| 暖暖在线中文免费日本| www日韩欧美| 国产午夜在线视频| 亚洲精品国产电影| www.国产麻豆| 3d成人h动漫网站入口| 男操女视频网站| 日韩欧美一区二区三区| 激情五月少妇a| 国产精品灌醉下药二区| 日本xxxxxxxxx18| 96av麻豆蜜桃一区二区| 绯色av蜜臀vs少妇| 国产美女视频一区| 中国黄色片一级| 免费人成网站在线观看欧美高清| 久久久久久久久久久久久国产精品 | 免费无码不卡视频在线观看| 欧美另类综合| 国产一级大片免费看| 午夜影院欧美| a级黄色片网站| 色综合咪咪久久网| 一区二区国产日产| 日韩理论在线| 亚洲精品无人区| 日韩大片在线播放| 婷婷五月色综合| 成人一区而且| 亚洲午夜精品一区二区| 日韩理论在线| 国产麻豆电影在线观看| 亚洲电影在线一区二区三区| 日本女人高潮视频| 欧美永久精品| 国产情侣第一页| 亚洲国产午夜| 欧美成人xxxxx| 久久婷婷麻豆| www.色偷偷.com| 麻豆精品新av中文字幕| 国产精品人人爽人人爽| 久久精品72免费观看| 欧美激情第3页| 国内久久婷婷综合| 人妻av一区二区三区| 99免费精品在线观看| 色无极影院亚洲| 国产精品欧美一级免费| 看黄色录像一级片| 一区二区在线免费观看| 日本少妇bbwbbw精品| 欧美性20hd另类| 制服丝袜在线一区| 日韩视频在线你懂得| 好吊色在线观看| 国产亚洲精品综合一区91| 午夜在线视频| 九九热最新视频//这里只有精品| 阿v视频在线| 国产精品日韩在线播放| 视频在线亚洲| 欧美成熟毛茸茸复古| 日本一区二区免费高清| 久久久天堂国产精品| 夜夜嗨一区二区三区| 亚洲一区在线不卡| 国产成人免费视频| 欧美做受高潮6| 亚洲美女在线一区| 超碰中文字幕在线| 欧美日本韩国一区| 午夜性色福利影院| 久久精品成人一区二区三区| 国产污视频在线播放| 国产日本欧美视频| 久久久久观看| 欧美性视频在线播放| 亚洲欧美激情诱惑| 国产sm在线观看| 国产精品免费久久久久| 日本熟妇一区二区| 欧美一区二区三区小说| 噜噜噜噜噜在线视频| 欧美成aaa人片免费看| 女生影院久久| 不卡一区二区三区四区五区| 国产欧美一区| 免费看又黄又无码的网站| 精品系列免费在线观看| 亚洲精品乱码久久久久久久| 亚洲欧美欧美一区二区三区| 青青艹在线观看| 日韩不卡在线观看| av小次郎在线| 国产欧美中文字幕| 神马电影久久| 久久久久久免费看| 国产激情视频一区二区在线观看 | 欧洲人成人精品| 色综合免费视频| 欧美成人精品xxx| 欧美视频在线视频精品| 欧洲视频一区二区三区| 在线欧美不卡| 久久久久亚洲av片无码v| 中文字幕一区二| 亚洲成人av网址| 亚洲丝袜一区在线| 中文字幕在线看片| 精品欧美日韩在线| 亚洲一本视频| 香蕉久久久久久av成人| 亚洲免费在线看| 99热精品在线播放| 久久精品视频免费播放| 老司机精品视频网| 亚洲视频欧美在线| 热久久国产精品| 成人小视频免费看| 欧美性一二三区| 爱久久·www| 国产精品高潮粉嫩av| 亚洲香蕉视频| 人妻少妇被粗大爽9797pw| 99久久99久久精品免费看蜜桃| 精品少妇爆乳无码av无码专区| 欧美一级xxx| 青春草视频在线观看| av蓝导航精品导航| 亚洲小说区图片区| 麻豆精品国产传媒av| 亚洲成年人影院| 深夜视频在线免费| 26uuu久久噜噜噜噜| 一呦二呦三呦国产精品| 一本久道综合色婷婷五月| 久久精品亚洲国产奇米99| 波多野结衣激情视频| 国产亚洲人成a一在线v站| 成人国产一区| 青春草在线视频免费观看| 狠狠v欧美v日韩v亚洲ⅴ| 欧美精品久久久久性色| 亚洲精品成人免费| 亚州一区二区三区| 亚洲在线不卡| 国产xxx精品视频大全| 五月天婷婷丁香| 亚洲香蕉在线观看| 国产精品一区二区美女视频免费看| 永久免费看av| 成人成人成人在线视频| 亚洲无码精品一区二区三区| zzjj国产精品一区二区| av综合网址| 激情婷婷综合网| 亚洲欧美另类图片小说| 五月天丁香视频| 国产精品一区二区久久久久| 伊人青青综合网| 少妇饥渴放荡91麻豆| 欧美亚洲高清一区二区三区不卡| 国产在线高清视频| 精品国产一区二区三区免费| 免费在线观看视频一区| 欧美人与禽zozzo禽性配| 日韩精品在线看| 精品999日本久久久影院| a级黄色一级片| 国产精品久久久久影视| 日本xxxx人| 国产精品视频久| 亚洲看片一区| 久久久久久久久久97| 日韩激情第一页| 97久久精品一区二区三区的观看方式| 国产一区二区四区| 国产精品久久久久四虎| 香港一级纯黄大片| 91精品视频在线免费观看| 麻豆精品91| 免费看一级一片| 中文字幕亚洲一区在线观看 | 黄色污污在线观看|