电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL數(shù)據(jù)類型優(yōu)化原則

瀏覽:2日期:2023-10-09 09:53:43

MySQL支持的數(shù)據(jù)類型很多,選擇正確的數(shù)據(jù)類型對于高性能至關(guān)重要。下面幾個(gè)簡單的原則都有助于做出更好的選擇。

更小的通常更好

應(yīng)該盡量使用可以正確儲存數(shù)據(jù)的最小數(shù)據(jù)類型。更小的數(shù)據(jù)類型通常更快,因?yàn)樗鼈冋加酶俚拇疟P、內(nèi)存和CPU緩存,并且處理時(shí)需要的CPU周期也更少。如果無法確定哪個(gè)數(shù)據(jù)類型時(shí)最好的,就選擇你認(rèn)為不會(huì)超過范圍的最小類型。

簡單就好

簡單數(shù)據(jù)類型的操作通常需要更少的CPU周期。例如,整形比字符操作代價(jià)更低,因?yàn)樽址托σ?guī)則(排序規(guī)則)使字符比較比整形更復(fù)雜。比如用MySQ內(nèi)建的類型而不是使用字符串來存儲日期和時(shí)間、應(yīng)該用整形存儲IP地址。

盡量避免null

如果查詢中包含可為null的列,對MySQL來說更難優(yōu)化,因?yàn)榭蔀閚ull的列使得索引、索引統(tǒng)計(jì)和值比較都較為復(fù)雜。可為null的列會(huì)使用更多的存儲空間,在MySQL里也需要特殊處理。當(dāng)可為null當(dāng)列被索引時(shí),每個(gè)索引記錄需要一個(gè)額外的字節(jié),在MyISAM里甚至還可能導(dǎo)致固定大小的索引變成可變大小的索引。

通常把可為null的列改為not null帶來的性能提升比較小,所以沒有必要在現(xiàn)有的架構(gòu)中查找并修改這種情況,除非確定這回導(dǎo)致問題。

例外的是在InnoDB使用獨(dú)立的位存儲null值,所以對于稀疏數(shù)據(jù)(很多值為null,只有少數(shù)行的列有非null值)有很好的空間效率,但這一點(diǎn)不適用于MyISAM。

在為列選擇數(shù)據(jù)類型時(shí)。

第一步需要確定合適的大類型:數(shù)字、字符串、時(shí)間等第二步是選擇具體類型。MySQL的很多數(shù)據(jù)類型都可以存儲相同類型的數(shù)據(jù),只是存儲的長度和范圍不一樣、允許的精度不一樣,或者需要的物理空間不同。

整數(shù)類型

存儲整數(shù)可以用這幾種類型

類型 存儲位數(shù) tinyint 8 smallint 16 mediumint 24 int 32 bigint 64

它們可以存儲的值的范圍-2^(N-1)^到2^(N-1)^-1,其中N是存儲空間的位數(shù)。整數(shù)類型還有可選有符號屬性,表示不允許負(fù)值,這可以使正數(shù)的上限提高一倍。如tinyint無符號可以存儲的范圍是0到255,但他允許負(fù)值但存儲范圍是-128到127。

MySQL選擇不同的整數(shù)類型是決定怎么在內(nèi)存和磁盤中保存數(shù)據(jù)的。但是在整數(shù)計(jì)算一般使用64位但bigint整數(shù),即使32位環(huán)境也是一樣。(除了聚合函數(shù))

MySQL還可以為整數(shù)類型指定寬度。如int(11),但是它不會(huì)限制值的合法范圍,只是規(guī)定了MySQL的一些交互工具(如SQLyog,navicat)用來顯示字符的個(gè)數(shù)。對于存儲和計(jì)算來說,int(1)和int(11)是相同的。

實(shí)數(shù)類型

實(shí)數(shù)是帶有小數(shù)部分的類型。MySQL中可以用decimal、float和double來存儲實(shí)數(shù)類型。

float和double類型支持使用標(biāo)準(zhǔn)的浮點(diǎn)運(yùn)算進(jìn)行近似計(jì)算。decimal類型用于存儲精確的小數(shù),在MySQL5.0以及更高的版本中,MySQL服務(wù)器自身實(shí)現(xiàn)了decimal的高精度計(jì)算。

浮點(diǎn)類型在存儲同樣范圍的值時(shí),通常比decimal使用更少的空間。float使用4個(gè)字節(jié)存儲,double使用8個(gè)字節(jié)存儲,相比flaot有更高的精度和更大的范圍。在浮點(diǎn)計(jì)算時(shí),MySQL都使用的double作為內(nèi)部浮點(diǎn)計(jì)算的類型。

在考慮對小數(shù)進(jìn)行精確計(jì)算時(shí),使用decimal(如財(cái)務(wù)數(shù)據(jù)),但在數(shù)據(jù)量大時(shí),可以考慮使用bigint代替decimal,將需要存儲但貨幣單位根據(jù)小數(shù)的位數(shù)乘以相同的倍數(shù)存儲。這樣可以避免decimal精確計(jì)算代價(jià)高的問題。

float和double使用的是cpu支持的原生浮點(diǎn)計(jì)算,所以快。decimal是MySQL服務(wù)器自身實(shí)現(xiàn)的高精度計(jì)算。

字符串類型

varchar和char是兩種最主要的字符串類型。

varchar

varchar類型用于存儲可變長字符串,是最常見的字符串?dāng)?shù)據(jù)類型。它比定長類型更節(jié)省空間,因?yàn)樗鼉H使用必要的空間。

varchar需要使用1個(gè)或2個(gè)額外字節(jié)記錄字符串長度:如果列的最大長度小于或等于255字節(jié),則只使用1個(gè)字節(jié)表示,否則使用2個(gè)字節(jié)。

varchar節(jié)省了存儲空間,所以對性能也有幫助。但是,由于行是變長的,在update時(shí)可能使行變得比原來更長,這就導(dǎo)致需要做額外的工作。因?yàn)樾姓加玫目臻g增長,并且在頁內(nèi)沒有更多的空間可以存儲。這種情況下,MyISAM會(huì)將行拆成不同的片段存儲,InnoDB需要分裂頁來使行可以放進(jìn)頁內(nèi)。其他一些存儲引擎也許不在原數(shù)據(jù)位置更新數(shù)據(jù)。

使用varchar最合適的場景是:在字符串列的最大長度比平均長度大很多;列更新很少(碎片不是問題);使用了像utf-8這樣復(fù)雜的字符集,每個(gè)字符都使用不同的字節(jié)數(shù)進(jìn)行存儲。

使用varchar(5)和varchar(200)存儲‘hello’的空間開銷是一樣的,但是使用更長的列會(huì)消耗更多的內(nèi)存,MySQL通常會(huì)分配固定大小的內(nèi)存快來保存內(nèi)部值。尤其是使用內(nèi)存臨時(shí)表進(jìn)行排序或操作時(shí)會(huì)特別糟糕,在利用磁盤臨時(shí)表進(jìn)行排序同樣糟糕。所以最好的策略是只分配真正需要的空間。

char

char類型是定長的。MySQL總是根據(jù)定義的字符串長度分配足夠的空間。當(dāng)存儲char值時(shí),MySQL會(huì)刪除所有的末尾空格。char值會(huì)根據(jù)需要采用空格進(jìn)行填充以方便比較。

char適合存儲很短的字符串,或者所有值都接近同一個(gè)長度。例如密碼的MD5值。對于經(jīng)常變更的數(shù)據(jù),char也比varchar更好,因?yàn)槎ㄩL的char不容易產(chǎn)生碎片。對于非常短的列,char比varchar在存儲空間上也更有效率,因?yàn)関archar需要額外字節(jié)記錄長度。

以上就是MySQL數(shù)據(jù)類型優(yōu)化原則的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)類型優(yōu)化的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 苏州西装定制-西服定制厂家-职业装定制厂家-尺品服饰西装定做公司 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 河南凯邦机械制造有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 灌装封尾机_胶水灌装机_软管灌装封尾机_无锡和博自动化机械制造有限公司 | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 据信,上课带着跳 D 体验-别样的课堂刺激感受引发网友热议 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 氢氧化钾厂家直销批发-济南金昊化工有限公司| 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 酸度计_PH计_特斯拉计-西安云仪 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 地脚螺栓_材质_标准-永年县德联地脚螺栓厂家 | 精密冲床,高速冲床等冲压设备生产商-常州晋志德压力机厂 | 钢格板|热镀锌钢格板|钢格栅板|钢格栅|格栅板-安平县昊泽丝网制品有限公司 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 |