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

MySQL到底是join性能好,還是in一下更快呢?

數據庫 MySQL
不過使用 join 時,小表驅動大表,一定要建立索引,join 的表最好不要超過 3 個,否則性能會非常差,還會大大增加 sql 的復雜度,非常不利于后續功能擴展。

大家好呀,我是樓仔。

今天發現一篇很有意思的文章,使用 mysql 查詢時,是使用 join 好,還是直接 in 更好,這個大家工作時經常遇到。

為了方便大家查看,文章我重新進行了排版。

我沒有直接用作者的結論,感覺可能會誤導讀者,而是根據實驗結果,給出我自己的建議。

不 BB,上目錄:

圖片圖片

01 背景

事情是這樣的,去年入職的新公司,之后在代碼 review 的時候被提出說,不要寫 join,join 耗性能還是慢來著,當時也是真的沒有多想,那就寫 in 好了。

最近發現 in 的數據量過大的時候會導致 sql 慢,甚至 sql 太長,直接報錯了。

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

以下實驗僅在本機電腦試驗。

02 表結構

2.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 '手機號',
  `create_time` datetime NOT NULL COMMENT '創建時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `mobile` (`mobile`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1005 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

2.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 '訂單狀態',
  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

03 千條數據情況

數據量:用戶表插一千條隨機生成的數據,訂單表插一百條隨機數據

要求:查下所有的訂單以及訂單對應的用戶

耗時衡量指標:多表連接查詢成本 = 一次驅動表成本 + 從驅動表查出的記錄數 * 一次被驅動表的成本

3.1 join

select order.id, price, user.name from order join user on order.user_id = user.id;

圖片圖片

3.2 in

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.3 并發場景

主要用php原生寫了腳本,用ab進行10個同時的請求,看下時間,進行比較。

> ab -n 100 -c 10 // 執行腳本

下面是 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();

圖片圖片

下面是 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做數組鍵
 $userRes = [];
 foreach ($users as $user) {
     $userRes[$user['id']] = $user['name'];
 }

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

 // 關閉mysql連接

 $mysqli->close();

圖片圖片

看時間的話,明顯 join 更快一些。

04 萬條數據情況

user表現在10000條數據,order表10000條試下。

4.1 join

圖片圖片

4.2 in

order 耗時:

圖片圖片

user 耗時:

圖片圖片

4.3 并發場景

join 耗時:

圖片圖片

in 耗時:

圖片圖片

數據量達到萬級別,非并發場景,in 更快,并發場景 join 更快。

05 十萬條數據情況

隨機插入后user表十萬條數據,order表一百萬條試下。

5.1 join

圖片圖片

5.2 in

order 耗時:

圖片圖片

user 耗時:

order查出來的結果過長了...

5.3 并發場景

join 耗時:

圖片圖片

in 耗時:

圖片圖片

數據量達到十萬/百萬級別,非并發場景,in 過長,并發場景 join 更快。

06 總結

實驗結論:

  • 數據量不到萬級別,join 和 in 差不多;
  • 數據量達到萬級別,非并發場景,in 更快,并發場景 join 更快;
  • 數據量達到十萬/百萬級別,非并發場景,in 過長,并發場景 join 更快。

下面是樓仔給出的一些建議。

當數據量比較小時,建議用 in,雖然兩者的性能差不多,但是 join 會增加 sql 的復雜度,后續再變更,會非常麻煩。

當數據量比較大時,建議用 join,主要還是出于查詢性能的考慮。

不過使用 join 時,小表驅動大表,一定要建立索引,join 的表最好不要超過 3 個,否則性能會非常差,還會大大增加 sql 的復雜度,非常不利于后續功能擴展。

責任編輯:武曉燕 來源: 樓仔
相關推薦

2023-12-01 08:27:53

MySQLjoin

2018-09-26 14:17:00

編程語言JavaPython

2018-10-09 15:26:19

JavaPython語言

2024-03-15 08:06:58

MySQLJOIN命令

2019-02-14 14:09:09

散熱器水冷一體式

2023-10-09 22:18:28

Python強制縮進

2021-08-31 07:54:24

TCPIP協議

2015-04-21 09:20:40

SwfitObject—C

2017-08-09 08:43:02

公有云趨勢聲勢

2011-09-05 10:30:51

重構代碼庫業務模型

2024-03-28 13:13:00

Htmx前端開發框架

2014-11-17 10:03:23

OpenStack

2023-10-10 16:03:48

數字化信息化

2014-06-05 14:46:05

設計設計師

2022-08-18 23:13:25

零信任安全勒索軟件

2020-08-31 19:19:27

TCPUDP視屏面試

2021-12-09 20:16:26

無線核心網傳輸

2020-10-19 09:51:18

MYSQL知識數據庫

2020-06-02 10:38:15

IDEiOSLinux

2020-08-31 19:17:24

Python強類型語言弱類型語言
點贊
收藏

51CTO技術棧公眾號

欧美日韩激情视频在线观看| 97自拍视频| 亚洲欧美va天堂人熟伦| jizz欧美| 一区二区三区在线视频观看 | 国产手机免费视频| 三级理论午夜在线观看| 免费在线看成人av| 欧美高跟鞋交xxxxxhd| 蜜臀av一区二区三区有限公司| 日本.亚洲电影| 亚洲综合久久av| 日韩高清国产精品| 黄色三级网站在线观看| 老司机午夜精品| 91精品国产色综合久久不卡98口 | 亚洲伦在线观看| 欧美在线一二三区| 成人精品在线播放| 久久黄色级2电影| 欧美亚洲成人xxx| 天天操天天操天天操天天操天天操| 久久亚洲道色| 日韩三级高清在线| 九色91popny| 国产美女高潮在线| 亚洲乱码国产乱码精品精98午夜| 日本一区免费在线观看| 免费观看a视频| 国产一区二区三区免费| 国产精品人人做人人爽| av资源免费观看| 黑人一区二区| 免费91麻豆精品国产自产在线观看| 法国空姐电影在线观看| 91精品国产自产精品男人的天堂| 欧美日韩一区二区三区不卡 | 欧美黄色一级网站| 国产精品久久久久久影院8一贰佰| 日韩精品视频三区| 亚洲一区二区在线免费| 97成人在线| 欧美一区二区精品| 天天干天天色天天干| 成人高清一区| 欧洲生活片亚洲生活在线观看| 无码人妻精品一区二区三区在线| 成人性生交大片免费看网站 | 黄色一级视频免费看| 99热免费精品| 992tv在线成人免费观看| 久久久久久久久99| 在线欧美不卡| 91成人在线视频| 国产美女激情视频| 香蕉久久国产| 亚洲午夜激情网站| 婷婷四房综合激情五月| 国产美女性感在线观看懂色av| 99精品1区2区| 久久久久久久有限公司| 青青草超碰在线| 91小视频免费看| 欧美日韩一区二区三区在线观看免| 国产精品久久久久久影视| 伊人性伊人情综合网| 国产一区二区三区四区五区在线| 精品女同一区二区三区| 国产精品一区一区三区| 91丨九色丨国产| 丰满人妻熟女aⅴ一区| 成人av网站大全| 精品欧美一区二区在线观看视频| 欧美 日韩 综合| 成人国产一区二区三区精品| 国严精品久久久久久亚洲影视| 二区三区在线视频| 91视频国产观看| 日韩高清国产一区在线观看| 亚洲天天影视| 亚洲精品国产精品乱码不99| 日韩国产小视频| 看黄在线观看| 在线免费观看一区| theporn国产精品| 97色成人综合网站| 日韩精品免费观看| 日本免费www| 91精品秘密在线观看| 欧美国产亚洲视频| 超碰超碰超碰超碰| 久久精品国产免费看久久精品| 95av在线视频| 天堂在线中文资源| 国产精品久久久久精k8| 免费高清一区二区三区| 亚洲国产欧美日本视频| 欧美日韩国产一区二区三区地区| xxxx视频在线观看| 欧美日韩久久精品| 欧美极品欧美精品欧美视频| 亚洲色成人www永久网站| 国产精品伊人色| 欧美精品成人一区二区在线观看| 蜜桃视频在线观看免费视频网站www| 亚洲自拍另类综合| 欧美日韩怡红院| 盗摄牛牛av影视一区二区| 最近2019年手机中文字幕 | 国产夫妻性生活视频| 91免费在线视频观看| 亚洲人体一区| 涩涩涩在线视频| 日韩一区二区在线看| 久久人人爽人人爽人人片| 99视频精品全部免费在线视频| 久久久久在线观看| 999免费视频| 亚洲国产精品激情在线观看| 国产一级爱c视频| www.欧美视频| 正在播放欧美一区| 可以免费在线观看的av| 国产一区91精品张津瑜| 欧洲精品码一区二区三区免费看| 丁香花在线影院| 91精品一区二区三区在线观看| aa一级黄色片| 国产欧美日韩一级| 国产精品日韩欧美一区二区| 成人影院在线观看| 欧美日韩国产综合一区二区三区| 三级网站在线免费观看| 一级成人国产| 国产精品一区二区三区在线观 | 亚洲欧美日韩综合aⅴ视频| 国产男女激情视频| 台湾佬综合网| 欧美亚洲激情视频| 日韩二区三区| 精品久久中文字幕久久av| 99久久综合网| 综合久久十次| 亚洲a∨日韩av高清在线观看| 欧美成人二区| 欧美日韩激情在线| 国产人与禽zoz0性伦| 美女视频黄 久久| 亚洲图片欧洲图片日韩av| 色成人免费网站| 亚洲色图激情小说| 日韩xxx视频| 国产精品久久影院| а 天堂 在线| 欧美网站在线| 精品国产电影| 伊人久久综合一区二区| 亚洲美女在线看| 黄色av网站免费观看| 国产午夜久久久久| 污污网站在线观看视频| 欧美99在线视频观看| 99久热re在线精品996热视频| 青草视频在线免费直播| 亚洲第一精品福利| 久久精品视频7| 欧美国产视频在线| 国产一级免费大片| 好看的亚洲午夜视频在线| 国产在线一区二区三区四区| 欧美13videosex性极品| 国产亚洲精品综合一区91| 中文字幕观看视频| 一二三区精品福利视频| 三级视频网站在线观看| 日韩精品五月天| 在线丝袜欧美日韩制服| y111111国产精品久久久| 欧美在线欧美在线| 在线观看免费版| 日韩美女视频一区二区在线观看| 免费观看成人毛片| 国产精品久久久久久久久果冻传媒| 超碰人人cao| 香蕉精品999视频一区二区 | 黄色录像a级片| 日本在线观看不卡视频| 免费cad大片在线观看| 青青草久久爱| 成人精品久久久| а√在线中文在线新版| 最近2019年日本中文免费字幕 | 国产一区精品二区| 97视频在线观看成人| 午夜激情在线观看| 亚洲精品福利免费在线观看| 一级久久久久久久| 香蕉成人伊视频在线观看| 日本免费www| 不卡一区中文字幕| 国产精品久久久久久久av福利| 在线视频日韩| 日本福利视频在线观看| 国产欧美日韩| 国产伦精品一区| 91国产精品| 日本三级久久久| 手机在线免费av| 最近中文字幕日韩精品| 少妇人妻偷人精品一区二区| 欧美日本在线看| 日韩精品一区二区亚洲av| 一区二区三区中文字幕在线观看| 成年人免费观看视频网站| 成人午夜电影小说| 国产欧美激情视频| 日韩电影在线免费看| 久久久性生活视频| 女同性一区二区三区人了人一| 日本一区视频在线| 亚洲欧美日本伦理| 国内精品视频免费| 136导航精品福利| 91九色精品视频| julia一区二区三区中文字幕| 欧美亚洲另类激情另类| 爱草tv视频在线观看992| 欧美成人中文字幕| 巨大荫蒂视频欧美另类大| 亚洲香蕉成视频在线观看| 午夜视频福利在线| 欧美精品一区二区久久婷婷| 亚洲国产一二三区| 日韩欧美亚洲一区二区| 99久久免费国产精精品| 8v天堂国产在线一区二区| 最近中文字幕在线免费观看 | 国产一区视频免费观看| 国产偷自视频区视频一区二区| 欧美大黑帍在线播放| 欧美在线免费一级片| 亚洲自拍偷拍一区二区三区| 婷婷另类小说| 日韩不卡视频一区二区| 自拍日韩欧美| 国产精品一二三在线观看| 中文字幕一区二区av| 国产欧美综合一区| 亚洲九九在线| 精品无码av无码免费专区| 中文字幕日韩欧美精品高清在线| 只有这里有精品| 午夜精品久久久久99热蜜桃导演| 日韩中文字幕在线不卡| 欧美在线二区| 国产伦精品一区二区三区四区视频_| 91久久视频| www国产黄色| 日韩福利视频导航| 在线观看岛国av| 国产一区二区剧情av在线| 先锋资源在线视频| 成人av电影在线观看| 中出视频在线观看| 久久久久久久久久久久久夜| 免费看黄色三级| 亚洲婷婷在线视频| 久久免费视频播放| 欧美性少妇18aaaa视频| www.久久网| 欧美一级二级在线观看| 亚洲国产999| 精品亚洲国产视频| yourporn在线观看中文站| 精品国产一区二区三区久久| 国产高清一区二区三区视频| 欧美国产乱视频| 日韩成人影音| 亚洲伊人久久综合| 日韩美女国产精品| 在线国产精品网| 亚洲国产免费看| 丰满少妇在线观看| 国产福利一区二区三区在线视频| 成年人的黄色片| 国产精品久久久久影院| 国产真实乱人偷精品视频| 色婷婷久久综合| 国产精品美女一区| 亚洲精品成人久久久| 午夜毛片在线| 91成人在线播放| 成人激情久久| 欧美日本亚洲| 欧美性久久久| 91n.com在线观看| 国产福利91精品| 性猛交娇小69hd| 亚洲色图.com| 午夜精品免费观看| 欧美v日韩v国产v| 在线激情网站| 日韩av大片免费看| 日韩有吗在线观看| 亚洲精品一区二区三区蜜桃久| 国产精品videosex极品| 9久久婷婷国产综合精品性色 | 日韩在线观看电影完整版高清免费| 亚洲视频电影在线| 校园春色 亚洲色图| 成人精品电影在线观看| 超碰人人人人人人人| 午夜精品一区二区三区免费视频 | 在线观看成人av电影| 亚洲一区欧美二区| 激情综合激情五月| 综合久久久久综合| 中文字幕有码视频| 亚洲美女自拍视频| 日韩脚交footjobhd| 99国精产品一二二线| 91欧美大片| 欧美三级理论片| 久久色.com| wwwxxx亚洲| 亚洲精品国产精品自产a区红杏吧| av免费在线观| 91欧美精品午夜性色福利在线| 超碰成人久久| 搡女人真爽免费午夜网站| 久久精品一区二区三区不卡| 午夜精品久久久久久久久久久久久蜜桃 | 男人揉女人奶房视频60分| 不卡的av在线| 国产精品第56页| 精品日韩成人av| 超碰97免费在线| 国产伦精品一区二区| 亚洲一级一区| 成人在线视频免费播放| 欧美日韩午夜激情| 日韩资源在线| 日韩美女主播视频| av中文一区| 性chinese极品按摩| 国产精品素人视频| 中文字幕码精品视频网站| 亚洲无亚洲人成网站77777| 成人美女黄网站| 欧美一级二级三级九九九| 久久精品一区| 精品无码国产污污污免费网站 | 亚洲制服丝袜在线| 亚洲高清视频网站| 69视频在线播放| 神马久久一区二区三区| 黄色一级二级三级| 亚洲欧美中日韩| 国产男女猛烈无遮挡| 色在人av网站天堂精品| 欧美成a人免费观看久久| 播放灌醉水嫩大学生国内精品| 久久先锋影音av| 中文有码在线播放| 久久国产精品久久久久久| 成人h动漫精品一区二区器材| 国产老熟妇精品观看| 久久蜜臀中文字幕| 国产一区二区三区在线观看| 久久精品国产亚洲7777| 136福利精品导航| 国产淫片av片久久久久久| 亚洲欧洲日韩av| 亚洲欧美另类综合| 国产aaa精品| 亚洲美女视频| 日韩 中文字幕| 欧美乱妇20p| 国产理论在线| 一区二区免费电影| 成人国产一区二区三区精品| 懂色av蜜臀av粉嫩av分享吧最新章节| 日韩在线观看你懂的| 成人自拍在线| 亚洲黄色av网址| 亚洲午夜影视影院在线观看| 黄上黄在线观看| 国产超碰91| 裸体一区二区三区| 国产乡下妇女做爰| 中文字幕免费精品一区| 国产成人在线中文字幕| 777视频在线| 欧美日韩国产麻豆| 国产盗摄在线观看| 日本一区二区免费看| 丰满岳乱妇一区二区三区| 国产一级片免费视频| 国外成人性视频| 久久久久久美女精品|