日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql tinyint和char(1)性能对比

發布時間:2025/3/20 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql tinyint和char(1)性能对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在數據庫設計的時候會遇到很多只需要0、1、2這種固定幾個值的狀態字段,基本上都建議設置為只占一字節的tinyint類型,有些覺得char(1)是一樣,畢竟char(1)存儲數字和字母時一個字符也只是占一個字節


mysql是用c++寫的,而在c++中字符類型是存放對應ascii碼的二進制到存儲空間,而整型數字是直接存數字的二進制,雖然最終都是二進制存儲,但是環節上有少許不同,同樣在msyql查找時也會有所不同,下圖摘自小白版c++教程《c++ primer plus》:



今天對tinyint和char(1)做了個簡單測試,分表建兩個表t1、t2,結構如下:

mysql> show create table t1\G

*************************** 1. row ***************************

? ? ? ?Table: t1

Create Table: CREATE TABLE `t1` (

? `_id` int(11) NOT NULL AUTO_INCREMENT,

? `id` tinyint(4) DEFAULT NULL,

? `title` text,

? PRIMARY KEY (`_id`),

? KEY `id` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2400096 DEFAULT CHARSET=utf8

1 row in set (0.00 sec)


mysql> show create table t2\G

*************************** 1. row ***************************

? ? ? ?Table: t2

Create Table: CREATE TABLE `t2` (

? `_id` int(11) NOT NULL AUTO_INCREMENT,

? `id` char(1) DEFAULT NULL,

? `title` text,

? PRIMARY KEY (`_id`),

? KEY `id` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2400096 DEFAULT CHARSET=utf8

1 row in set (0.00 sec)


兩個表唯一不同為id字段類型,總數據量都為2400096,id只有0、1、2三個,為了兩個表的數據一樣且磁盤上分布也一樣,降低IO對測試的影響,分別加載的數據如下:

mysql> select id,count(*) from t1 group by id;

+------+----------+

| id ? | count(*) |

+------+----------+

| ? ?0 | ?1199998 |

| ? ?1 | ?1199998 |

| ? ?2 | ? ? ? 99 |

+------+----------+

3 rows in set (0.55 sec)


mysql> select id,count(*) from t2 group by id;?

+------+----------+

| id ? | count(*) |

+------+----------+

| 0 ? ?| ?1199998 |

| 1 ? ?| ?1199998 |

| 2 ? ?| ? ? ? 99 |

+------+----------+

3 rows in set (0.77 sec)


查看執行計劃:

mysql> explain select _id from test.t2 where id='1'; ? ? ? ? ? ? ? ? ? ? ?

+----+-------------+-------+------+---------------+------+---------+-------+---------+--------------------------+

| id | select_type | table | type | possible_keys | key ?| key_len | ref ? | rows ? ?| Extra ? ? ? ? ? ? ? ? ? ?|

+----+-------------+-------+------+---------------+------+---------+-------+---------+--------------------------+

| ?1 | SIMPLE ? ? ?| t2 ? ?| ref ?| id ? ? ? ? ? ?| id ? | 4 ? ? ? | const | 1170900 | Using where; Using index |

+----+-------------+-------+------+---------------+------+---------+-------+---------+--------------------------+

1 row in set (0.00 sec)


mysql> explain select _id from test.t1 where id=1;?

+----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+

| id | select_type | table | type | possible_keys | key ?| key_len | ref ? | rows ? ?| Extra ? ? ? |

+----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+

| ?1 | SIMPLE ? ? ?| t1 ? ?| ref ?| id ? ? ? ? ? ?| id ? | 2 ? ? ? | const | 1170601 | Using index |

+----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+

1 row in set (0.00 sec)


兩個表都使用了id索引,再看看information_schema.tables的信息是否和之前理解的存儲字節大小是否有出入:

mysql> select DATA_LENGTH/1024/1024,INDEX_LENGTH/1024/1024,data_free from tables where table_name in ('t1','t2');

+-----------------------+------------------------+-----------+

| DATA_LENGTH/1024/1024 | INDEX_LENGTH/1024/1024 | data_free |

+-----------------------+------------------------+-----------+

| ? ? ? ? ?310.81250000 | ? ? ? ? ? ?27.56250000 | ? ? ? ? 0 |

| ? ? ? ? ?313.81250000 | ? ? ? ? ? ?29.56250000 | ? ? ? ? 0 |

+-----------------------+------------------------+-----------+

2 rows in set (0.00 sec)


兩個表大小相差不多,確認char(1)和tinyint占字節數相同,現在直接看執行時間:

mysql> show profiles;

+----------+------------+---------------------------------------------------------------+

| Query_ID | Duration ? | Query ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

+----------+------------+---------------------------------------------------------------+

| ? ? ? ?1 | 0.60804275 | select count(*) from (select _id from test.t1 where id=1) a ? |

| ? ? ? ?2 | 0.59277575 | select count(*) from (select _id from test.t1 where id=1) a ? |

| ? ? ? ?3 | 0.60398000 | select count(*) from (select _id from test.t1 where id=1) a ? |

| ? ? ? ?4 | 0.69068025 | select count(*) from (select _id from test.t2 where id='1') a |

| ? ? ? ?5 | 0.69654200 | select count(*) from (select _id from test.t2 where id='1') a |

| ? ? ? ?6 | 0.67788800 | select count(*) from (select _id from test.t2 where id='1') a |

+----------+------------+---------------------------------------------------------------+


這樣就很明顯可以看出為char(1)字段的t2表查詢時消耗時間偏多,如果幾條幾百條的情況根本看不出char(1)和tinyint的差別,畢竟現在CPU的效率是非常高的,這里測試的利用了id=1的數據,有1199998條,這樣就可以看出點差別了!!雖然效率差別不是很大,為了生產環境統一以及提升QPS還是使用短小的整型更好


轉載于:https://blog.51cto.com/xiaozhong991/1892569

總結

以上是生活随笔為你收集整理的mysql tinyint和char(1)性能对比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性猛交ⅹxxx富婆视频 | 欧美中日韩在线 | 国产v亚洲v天堂无码 | 日女人免费视频 | 特种兵之深入敌后 | 97在线视频免费观看 | 97免费公开视频 | 国产999在线观看 | avtt亚洲 | 国产伦乱视频 | 日本欧美在线观看 | 国产人与zoxxxx另类 | 被灌满精子的波多野结衣 | 日本一二三区在线 | a天堂中文在线 | 欧洲精品一区 | 色网导航站 | 亲女禁h啪啪宫交 | 四虎一国产精品一区二区影院 | 欧美日韩中文字幕一区 | 日本欧美色 | 美女裸体网站久久久 | 岛国av在线免费 | 亚洲一区自拍偷拍 | 青青操免费在线视频 | 久久久久久久网 | 成人黄色免费网址 | 欧美日韩一二三四区 | 人妖性做爰aaaa | 亚洲资源av| 国产午夜福利在线播放 | 免费黄毛片 | 午夜高清视频 | 亚洲国产成人一区 | 亚洲乱亚洲 | 国产免费一区二区视频 | 欧亚一区二区三区 | 探花视频在线观看 | 欧美性猛交xxxx黑人交 | 鲁片一区二区三区 | 久久精品国产亚洲av麻豆 | 欧美 日韩 中文字幕 | 国产精品麻豆一区 | a中文在线 | 黄色一级影片 | 性欧美在线视频观看 | 毛片av在线播放 | 日韩三级久久 | 亚洲国产v | 自拍亚洲国产 | h在线播放 | 久久久嫩草 | 97精品一区二区三区 | 91精品国产日韩91久久久久久 | 国产综合久久 | 日韩美女做爰高潮免费 | 欧美在线一 | 中国女人和老外的毛片 | 日本少妇中出 | 狠狠干亚洲色图 | 无码国产色欲xxxxx视频 | 人妻妺妺窝人体色www聚色窝 | 欧美日韩一区不卡 | 日本视频二区 | 日本一级淫片免费放 | 国产女女做受ⅹxx高潮 | 国产69精品久久久 | 色婷婷激情五月 | 日美av| 国产精品久久久国产盗摄 | 亚洲一在线 | 98成人网 | 亚洲视频在线观看一区 | 蜜臀视频一区二区 | 秋霞无码一区二区 | 久久亚洲综合色图 | 免费在线成人 | 成人片黄网站色大片免费毛片 | 日韩 在线| 美女福利视频网 | 波多野结衣视频播放 | 精品人妻一区二区三区换脸明星 | 91精品国产高清 | 在线观看午夜视频 | 啄木乌欧美一区二区三区 | 亚洲一线二线在线观看 | 成人免费视频网址 | 就要干就要操 | 日韩成人av网站 | 色七七桃花综合影院 | www夜片内射视频日韩精品成人 | 国产精品老熟女视频一区二区 | 超碰免费在线97 | 日日操日日操 | 国产最新视频在线 | 韩国久久精品 | 久久网国产 | 国产自产视频 | 婷婷一区二区三区四区 |