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

MySQL 中 varchar(50) 和 varchar(500) 有何區別,你知道嗎?

數據庫 MySQL
我們不難發現,當我們最該字段進行排序操作的時候,Mysql會根據該字段的設計的長度進行內存預估, 如果設計過大的可變長度, 會導致內存預估的值超出sort_buffer_size的大小, 導致mysql采用磁盤臨時文件排序,最終影響查詢性能。

一、問題描述

我們在設計表結構的時候,設計規范里面有一條如下規則:

  • 對于可變長度的字段,在滿足條件的前提下,盡可能使用較短的變長字段長度。

為什么這么規定?我在網上查了一下,主要基于兩個方面

  • 基于存儲空間的考慮
  • 基于性能的考慮

網上說Varchar(50)和varchar(500)存儲空間上是一樣的,真的是這樣嗎?

基于性能考慮,是因為過長的字段會影響到查詢性能?

本文我將帶著這兩個問題探討驗證一下

二、驗證存儲空間區別

1.準備兩張表

CREATE TABLE `category_info_varchar_50` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(50) NOT NULL COMMENT '分類名稱',
  `is_show` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否展示:0 禁用,1啟用',
  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '序號',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '是否刪除',
  `create_time` datetime NOT NULL COMMENT '創建時間',
  `update_time` datetime NOT NULL COMMENT '更新時間',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_name` (`name`) USING BTREE COMMENT '名稱索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分類';

CREATE TABLE `category_info_varchar_500` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(500) NOT NULL COMMENT '分類名稱',
  `is_show` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否展示:0 禁用,1啟用',
  `sort` int(11) NOT NULL DEFAULT '0' COMMENT '序號',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '是否刪除',
  `create_time` datetime NOT NULL COMMENT '創建時間',
  `update_time` datetime NOT NULL COMMENT '更新時間',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_name` (`name`) USING BTREE COMMENT '名稱索引'
) ENGINE=InnoDB AUTO_INCREMENT=288135 DEFAULT CHARSET=utf8mb4 COMMENT='分類';

2.準備數據

給每張表插入相同的數據,為了凸顯不同,插入100萬條數據

DELIMITER $$
CREATE PROCEDURE batchInsertData(IN total INT)
BEGIN
    DECLARE start_idx INT DEFAULT 1;
    DECLARE end_idx INT;
    DECLARE batch_size INT DEFAULT 500;
    DECLARE insert_values TEXT;
    
    SET end_idx = LEAST(total, start_idx + batch_size - 1);

    WHILE start_idx <= total DO
        SET insert_values = '';
        WHILE start_idx <= end_idx DO
            SET insert_values = CONCAT(insert_values, CONCAT('(\'name', start_idx, '\', 0, 0, 0, NOW(), NOW()),'));
            SET start_idx = start_idx + 1;
        END WHILE;
        SET insert_values = LEFT(insert_values, LENGTH(insert_values) - 1); -- Remove the trailing comma
        SET @sql = CONCAT('INSERT INTO category_info_varchar_50 (name, is_show, sort, deleted, create_time, update_time) VALUES ', insert_values, ';');
        
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
       SET @sql = CONCAT('INSERT INTO category_info_varchar_500 (name, is_show, sort, deleted, create_time, update_time) VALUES ', insert_values, ';'); 
       PREPARE stmt FROM @sql;
        EXECUTE stmt;
    
        SET end_idx = LEAST(total, start_idx + batch_size - 1);
    END WHILE;
END$$
DELIMITER ;

CALL batchInsertData(1000000);

3.驗證存儲空間

查詢第一張表SQL

SELECT
    table_schema AS "數據庫",
    table_name AS "表名",
    table_rows AS "記錄數",
    TRUNCATE ( data_length / 1024 / 1024, 2 )  AS "數據容量(MB)",
    TRUNCATE ( index_length / 1024 / 1024, 2 )  AS "索引容量(MB)"
FROM
    information_schema.TABLES 
WHERE
    table_schema = 'test_mysql_field'
  and TABLE_NAME = 'category_info_varchar_50'
ORDER BY
    data_length DESC,
    index_length DESC;

查詢結果

圖片圖片

查詢第二張表SQL

SELECT
    table_schema AS "數據庫",
    table_name AS "表名",
    table_rows AS "記錄數",
    TRUNCATE ( data_length / 1024 / 1024, 2 )  AS "數據容量(MB)",
    TRUNCATE ( index_length / 1024 / 1024, 2 )  AS "索引容量(MB)"
FROM
    information_schema.TABLES 
WHERE
    table_schema = 'test_mysql_field'
  and TABLE_NAME = 'category_info_varchar_500'
ORDER BY
    data_length DESC,
    index_length DESC;

查詢結果

圖片圖片

4.結論

兩張表在占用空間上確實是一樣的,并無差別

三.驗證性能區別

1.驗證索引覆蓋查詢

select name from category_info_varchar_50 where name = 'name100000'
-- 耗時0.012s
select name from category_info_varchar_500 where name = 'name100000'
-- 耗時0.012s
select name from category_info_varchar_50 order by name;
-- 耗時0.370s
select name from category_info_varchar_500 order by name;
-- 耗時0.379s

通過索引覆蓋查詢性能差別不大

2.驗證索引查詢

select * from category_info_varchar_50 where name = 'name100000'
--耗時 0.012s
select * from category_info_varchar_500 where name = 'name100000'
--耗時 0.012s
select * from category_info_varchar_50 where name in('name100','name1000','name100000','name10000','name1100000',
'name200','name2000','name200000','name20000','name2200000','name300','name3000','name300000','name30000','name3300000',
'name400','name4000','name400000','name40000','name4400000','name500','name5000','name500000','name50000','name5500000',
'name600','name6000','name600000','name60000','name6600000','name700','name7000','name700000','name70000','name7700000','name800',
'name8000','name800000','name80000','name6600000','name900','name9000','name900000','name90000','name9900000') 
-- 耗時 0.011s -0.014s 
-- 增加 order by name 耗時 0.012s - 0.015s

select * from category_info_varchar_50 where name in('name100','name1000','name100000','name10000','name1100000',
'name200','name2000','name200000','name20000','name2200000','name300','name3000','name300000','name30000','name3300000',
'name400','name4000','name400000','name40000','name4400000','name500','name5000','name500000','name50000','name5500000',
'name600','name6000','name600000','name60000','name6600000','name700','name7000','name700000','name70000','name7700000','name800',
'name8000','name800000','name80000','name6600000','name900','name9000','name900000','name90000','name9900000') 
-- 耗時  0.012s -0.014s 
-- 增加 order by name 耗時 0.014s - 0.017s

索引范圍查詢性能基本相同, 增加了order By后開始有一定性能差別;

3.驗證全表查詢和排序

全表無排序

select * from category_info_varchar_50;
--耗時 0.875s
select * from category_info_varchar_500;
--耗時 0.866s

全表有排序

select * from category_info_varchar_50 order by  name ;
--耗時 1.498s
select * from category_info_varchar_500 order by  name  ;
--耗時 4.875s

結論:

全表掃描無排序情況下,兩者性能無差異,在全表有排序的情況下, 兩種性能差異巨大;

分析原因

varchar50 全表執行sql分析

圖片圖片

我發現86%的時花在數據傳輸上,接下來我們看狀態部分,關注Created_tmp_files和sort_merge_passes

圖片圖片

圖片圖片

Created_tmp_files為3。

sort_merge_passes為95。

varchar500 全表執行sql分析

圖片圖片

增加了臨時表排序。

圖片圖片

圖片圖片

Created_tmp_files 為 4。

sort_merge_passes為645。

關于sort_merge_passes, Mysql給出了如下描述:

Number of merge passes that the sort algorithm has had to do. If this value is large, you may want to increase the value of the sort_buffer_size.

其實sort_merge_passes對應的就是MySQL做歸并排序的次數,也就是說,如果sort_merge_passes值比較大,說明sort_buffer和要排序的數據差距越大,我們可以通過增大sort_buffer_size或者讓填入sort_buffer_size的鍵值對更小來緩解sort_merge_passes歸并排序的次數。

四.最終結論

至此,我們不難發現,當我們最該字段進行排序操作的時候,Mysql會根據該字段的設計的長度進行內存預估, 如果設計過大的可變長度, 會導致內存預估的值超出sort_buffer_size的大小, 導致mysql采用磁盤臨時文件排序,最終影響查詢性能。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2022-03-13 18:53:31

interfacetypeTypeScript

2024-05-27 00:00:00

localhostIPv6IPv4

2024-10-22 09:59:36

虛擬化容器化系統

2024-01-01 08:25:53

ViewSurface框架

2025-07-10 00:00:00

2023-04-26 10:21:04

2023-06-01 08:15:04

CentOS紅帽

2021-02-06 21:57:40

Debug模式Release

2022-06-08 07:34:25

InnoDBdeleteMySQL

2023-12-07 07:08:09

Angular函數

2023-09-01 07:38:45

ArrayListArrayst實線類

2023-12-29 22:41:12

同步架構業務

2021-07-27 08:02:45

DTO 軟件Pojo

2024-03-26 00:10:08

預測AI泛化

2023-04-26 10:06:08

RocketMQ屬性Consumer

2023-02-20 14:27:56

Kubernetes內存單位

2022-09-14 08:11:06

分頁模糊查詢

2022-08-26 01:41:42

GPUCPU架構

2021-08-29 18:01:57

HTTP協議版本

2022-01-09 23:20:50

手機國產蘋果
點贊
收藏

51CTO技術棧公眾號

欧美成人高清视频在线观看| 精品人妻一区二区三区四区不卡| 九九亚洲精品| 欧美日韩dvd在线观看| 懂色av一区二区三区四区五区| 亚洲国产精品无码久久| 亚洲自拍另类| 久久精品电影网站| 这里只有精品在线观看视频| 日韩中文视频| 亚洲一区二区综合| 日本不卡高清视频一区| 国产精品一区二区黑人巨大| 日韩午夜一区| 日韩小视频网址| 亚洲欧美日韩偷拍| av电影在线免费| 久久香蕉国产线看观看99| 国产精品人成电影| 欧美激情精品久久久久久免费| 国产一区二区在线观| 亚洲一区二区三区四区中文字幕| 国产精品视频一区二区三区经| 国产精品第二十页| 成人免费电影网址| 亚洲爱爱爱爱爱| wwwwww.色| 爱情岛亚洲播放路线| 国产亚洲欧洲一区高清在线观看| 成人亚洲激情网| 99精品视频99| 999久久久精品国产| 亚洲国产日韩欧美在线动漫| 免费看涩涩视频| 99爱在线视频| 中文字幕一区二区三区不卡| 久久综合狠狠综合久久综青草| 亚洲一线在线观看| 国产精品久久久亚洲一区| 日韩色av导航| 草草影院第一页| 日韩精品中文字幕一区二区 | 一区二区三区在线播放| 免费看成人午夜电影| 一二三区中文字幕| 在线高清一区| 久热精品视频在线| 亚洲第一综合网| 日日狠狠久久偷偷综合色| 6080午夜不卡| 99视频在线免费| 麻豆视频在线看| 亚洲一二三区不卡| 中文字幕制服丝袜在线| 黄网在线免费| 91小视频在线观看| 国产高清一区二区三区| 国产日韩欧美中文字幕| 免费观看在线综合| 情事1991在线| 天天综合网久久综合网| 亚洲激情av| 欧美日韩国产va另类| 午夜激情福利电影| 凹凸成人精品亚洲精品密奴| 亚洲丝袜av一区| 亚洲永久无码7777kkk| 97久久综合精品久久久综合| 日韩精品影音先锋| 亚洲视频在线不卡| 成人黄色91| 欧美丰满高潮xxxx喷水动漫| 五月婷婷之婷婷| 另类一区二区三区| 欧美日韩国产免费一区二区 | 国产高清一区二区三区视频| 亚洲欧美综合色| 黄色网址在线免费看| 免费黄网站在线| 亚洲婷婷综合色高清在线| 亚洲午夜精品福利| 国产写真视频在线观看| 亚洲天堂福利av| 国产91视频一区| 日本高清成人vr专区| 欧美亚洲动漫制服丝袜| 自拍视频国产精品| 日本二区在线观看| 久久最新网址| 国产亚洲xxx| 美国一级黄色录像| 91亚洲自偷观看高清| 日韩在线观看网站| 黄色录像二级片| 欧美激情精品久久久六区热门| 伦伦影院午夜日韩欧美限制| 欧美国产精品一二三| 欧美午夜a级限制福利片| 久久久久日韩精品久久久男男| 久久夜色精品亚洲| 视频一区欧美精品| 国产人妖伪娘一区91| 亚洲视频久久久| 国产精品综合视频| 3d精品h动漫啪啪一区二区| 国产99999| 丁香激情综合国产| 精品国产一区二区三区麻豆免费观看完整版 | 国产精品久久久久久妇女| 欧美日韩在线视频观看| 精品久久一二三| 国产免费拔擦拔擦8x高清在线人 | 成人va在线观看| 欧美午夜精品久久久久免费视| 日韩三级影院| 午夜精品久久久久久久99樱桃| 日韩福利视频在线| 国产麻豆一区二区三区| 337p日本欧洲亚洲大胆精品| 免费网站在线高清观看| 欧美精品国产一区二区| 2025国产精品视频| 91在线视频国产| 波多野结衣视频一区| 一级二级三级欧美| 成年人在线网站| 538在线一区二区精品国产| 亚洲av成人片无码| 欧美电影三区| 91精品国产91久久久久久吃药| 中文字幕观看在线| 成人h版在线观看| 在线码字幕一区| 午夜久久中文| 欧美一级高清片| 97人妻人人揉人人躁人人| 亚洲乱亚洲高清| 91免费欧美精品| 成人动漫在线免费观看| 亚洲一级二级三级| 怡红院亚洲色图| 蜜乳av综合| 91精品成人久久| 俄罗斯嫩小性bbwbbw| 国产精品你懂的在线欣赏| 国模无码视频一区二区三区| 99久久香蕉| 久久天天躁狠狠躁夜夜av| 精品久久久久久久久久久国产字幕 | 日本久久综合网| 岛国精品在线播放| 91社在线播放| 狠狠久久综合| 一区二区欧美日韩视频| 国产成人一级片| www.成人网.com| youjizz.com在线观看| www999久久| 精品国偷自产在线| 中文字幕+乱码+中文字幕明步| 成人免费va视频| 欧美日韩中文字幕在线播放| 国产精品视频一区视频二区| 最好看的2019的中文字幕视频| 91在线视频在线观看| 99国产精品久| 欧美 日韩 激情| 亚洲人成网站77777在线观看| 韩剧1988在线观看免费完整版| www.97超碰| 亚洲影院免费观看| 亚洲精品一区二区18漫画| 亚洲国产日韩欧美在线| 成人精品一区二区三区电影免费| 98在线视频| 欧美日韩美少妇| 在线视频这里只有精品| 麻豆精品一区二区av白丝在线| 色噜噜一区二区| 免费一区二区三区四区| 久久久国产一区二区三区| 91片黄在线观看喷潮| 亚洲欧美精品午睡沙发| 五月天六月丁香| 欧美日韩国产精品一区二区亚洲| 国产91社区| 91丝袜在线| 亚洲欧美制服另类日韩| 中国精品一区二区| 中文字幕在线不卡一区二区三区| 国产精品探花在线播放| 欧美三级乱码| 久久亚裔精品欧美| 美女搞黄视频在线观看| 亚洲视频777| 国产情侣激情自拍| 亚洲午夜精品一区二区三区他趣| 一级做a爰片毛片| 日本成人中文字幕| 中文字幕第50页| 日本国产精品| 国产精品亚洲精品| 影音先锋在线播放| 日韩精品免费综合视频在线播放| 中文字幕在线天堂| 亚洲欧美一区二区久久| 国产精品久久久久久亚洲色| 日韩激情一区二区| 日本三级中文字幕在线观看| 精品伊人久久久| 国产精品第一视频| 1769免费视频在线观看| 日韩精品免费在线| 国产又大又黄又爽| 偷拍一区二区三区四区| 性猛交娇小69hd| 国产凹凸在线观看一区二区| 日本不卡在线观看视频| 亚洲国产成人精品女人| 免费精品视频一区| 精品视频91| 国产成+人+综合+亚洲欧美丁香花| 老司机午夜在线| 日韩av最新在线| 国产熟女一区二区丰满| 日韩欧美成人区| 免费在线一级片| 国产欧美精品区一区二区三区| 久热在线视频观看| 黄色日韩精品| 亚洲精品第一区二区三区| 亚洲大片精品免费| 国产日韩在线观看av| 中文字幕 在线观看| 精品视频9999| 在线观看a视频| 精品视频久久久久久| 精品人妻av一区二区三区| 色一区在线观看| 国产无遮挡aaa片爽爽| 综合激情成人伊人| 日本xxxxxxxxx18| youjizz国产精品| 18深夜在线观看免费视频| 青青草国产成人99久久| 国产精品沙发午睡系列| 欧美日韩一区自拍| 免费观看中文字幕| 久久精品播放| 亚洲v国产v在线观看| 国产精品xxx在线观看| 成人性生交大片免费看视频直播| 亚洲精品aaa| 国产精品久久久久久久电影 | 亚洲黄色片在线观看| 青青操在线播放| 欧美国产丝袜视频| 波多野结衣av在线观看| 成人免费视频网站在线观看| 久国产精品视频| 全国精品久久少妇| 三级在线免费看| 三级成人在线视频| 国产女女做受ⅹxx高潮| 国产精品夜夜夜| 啊啊啊一区二区| 亚洲女人av| 两根大肉大捧一进一出好爽视频| 日韩视频在线一区二区三区| 成人免费毛片在线观看| 黄色亚洲精品| 日韩人妻无码精品久久久不卡| 欧美欧美全黄| 日韩精品视频在线观看视频| 雨宫琴音一区二区在线| 97在线国产视频| 夜夜嗨一区二区三区| 日本十八禁视频无遮挡| 99综合视频| 无码人妻h动漫| 天堂va蜜桃一区二区三区漫画版| av免费在线播放网站| 日韩国产精品大片| 日本在线观看a| 三级欧美在线一区| 国产精品久久久久久9999| 国产精品香蕉一区二区三区| 绯色av蜜臀vs少妇| 99久久精品99国产精品| 四虎永久免费影院| 久久精品人人做人人综合| 国产精品美女高潮无套| 亚洲欧洲国产日韩| 久久精品99国产精| 欧美日韩一二三四五区| 日韩av免费播放| 欧美久久婷婷综合色| 精品人妻一区二区三区浪潮在线| 亚洲国产成人在线播放| 男人天堂亚洲二区| 日韩在线视频网站| 国产第一页在线| 日韩女在线观看| 日韩欧乱色一区二区三区在线| 亚洲专区中文字幕| 日韩aaa久久蜜桃av| 涩涩涩999| 欧美xxx在线观看| 国产成人一区二区三区别| 国产农村妇女精品一二区| 五月天婷婷影视| 国产在线不卡一卡二卡三卡四卡| 五月天激情小说| 国产精品你懂的在线| 久久精品www| 欧美亚洲愉拍一区二区| 午夜精品在线播放| 亚洲偷熟乱区亚洲香蕉av| 1024在线播放| 国产精品黄视频| av成人资源| 亚洲国产精品一区二区第一页| 狠狠爱www人成狠狠爱综合网 | 美国欧美日韩国产在线播放| 午夜免费福利影院| 国产精品三级av| 欧美三日本三级少妇99| 7777女厕盗摄久久久| 日本亚洲欧美| 欧美成人免费播放| 在线成人视屏| 国产在线精品一区二区三区》| 九一国产精品| 99久久久精品视频| 国精产品一区一区三区mba视频| 51调教丨国产调教视频| 亚洲精品中文在线观看| 中文字幕第315页| 亚洲欧美成人网| 999福利在线视频| 99www免费人成精品| 欧美激情理论| 毛葺葺老太做受视频| 97国产一区二区| 青青草精品在线视频| 欧美日韩国产123区| 国产福利电影在线| 69久久夜色精品国产7777| 少妇精品在线| 大地资源网在线观看免费官网| 久久综合导航| 精品少妇一区二区三区免费观| 午夜精品123| www.黄色av| 欧美精品一区二区三区国产精品| 国产人妖一区| 亚洲a∨一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 国产91在线精品| 日韩av一级大片| 久久久久中文| 播金莲一级淫片aaaaaaa| 欧美性猛交xxxx免费看| 日韩精品视频无播放器在线看| 国语自产精品视频在线看一大j8 | 国产综合色一区二区三区| 欧美成人一区二免费视频软件| 一二三级黄色片| 亚洲欧美在线另类| 91亚洲精品国偷拍自产在线观看 | 国产精品我不卡| 韩日成人在线| 香港三日本8a三级少妇三级99| 亚洲高清在线精品| 手机在线观看免费av| 97av在线视频免费播放| а√中文在线天堂精品| 国产av不卡一区二区| 久久成人免费日本黄色| 性色国产成人久久久精品 | 91亚洲精品国偷拍自产在线观看| 精品国偷自产在线| 日韩欧美激情电影| 国产美女在线一区| 成人性视频免费网站| 久草视频在线资源| 精品国产a毛片| 成人ssswww在线播放| 国产精品欧美久久| 亚洲一区二区动漫| 丰满少妇一区二区| 欧美日韩黄色一区二区| 成人av黄色| 国产三区精品| 日韩电影一区二区三区四区| 久久一级免费视频| 欧美成人国产一区二区| 中文在线中文资源| 一本二本三本亚洲码| 懂色av噜噜一区二区三区av|