mysql中,对数据类型的合理选择,有利未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。于我们在检索时,更快的获取数据,或者更精本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】确的进行计算。
【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】选择char还是varchar
著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshua【作者:唐霜】【本文受版权保护】ng.net首先,这两个类型都表示字符串类型,我们都著作权归作者所有,禁止商业用途转载。【本文受版权保护】知道char存储需求是固定的,例如cha【转载请注明来源】【关注微信公众号:wwwtangshuangnet】r(16)就会产生16字节,即使值是空的【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net,而varchar的存储需求是变动的,根本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。据存入的值的多少进行变化,例如varch未经授权,禁止复制转载。【本文首发于唐霜的博客】ar(16),虽然你保存了’本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】abc’,但它并不会消耗16【转载请注明来源】未经授权,禁止复制转载。个字节,而是4个字节。同时你要注意,如果【原创内容,转载请注明出处】【原创内容,转载请注明出处】存入的字符串长度超过16个字符,则会报错【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。,即使强行存入,也仅保留了前面16个字符转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】。
转载请注明出处:www.tangshua【作者:唐霜】【作者:唐霜】ng.net【原创内容,转载请注明出处】【原创不易,请尊重版权】【版权所有】唐霜 www.tangshu本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netang.net其次,什么情况下会影响查询性能?我们在阅【版权所有,侵权必究】【原创不易,请尊重版权】读一些文章时,总是指出固定的长度检索速度【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】更快。但其实这是在一定条件下。当使用My本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。ISAM引擎时,char会比varcha【原创内容,转载请注明出处】未经授权,禁止复制转载。r更快,因为char(16)的字段中如果未经授权,禁止复制转载。【作者:唐霜】保存’abc’,著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。存储时实际存储的是’abc 转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】 ‘,【未经授权禁止转载】【本文受版权保护】系统不会以16个字节去进行检索,而是将末本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】尾的空格去掉,实际上直接获取了̵【本文受版权保护】【原创内容,转载请注明出处】7;abc’检索对比,而如果原创内容,盗版必究。转载请注明出处:www.tangshuang.netvarchar(16)中保存了̵原创内容,盗版必究。原创内容,盗版必究。7;abc’,虽然不会在实际【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】存储中添加空格,但是数据库会给这个字段增【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。加一个长度,因此,varchar的实际容【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。量会大1-2字节,在检索时,需要先获取这【作者:唐霜】【版权所有,侵权必究】个长度,然后在对值进行对比,因此速度反而转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。更慢。所以,如果使用MyISAM引起,c转载请注明出处:www.tangshuang.net【版权所有,侵权必究】har的性能会好一些。但是在使用Inno【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。DB引擎时,情况就不一样了,存储方面仍然【转载请注明来源】转载请注明出处:www.tangshuang.net是按照上述方法进行存储,但是在查询时,I著作权归作者所有,禁止商业用途转载。【转载请注明来源】nnoDB引擎直不再区分数据存储长度,而【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】是直接通过数据在存储器上的指针找到数据,转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net因此实际上上述的影响全部不存在了。但是数未经授权,禁止复制转载。【转载请注明来源】据的读取受到磁盘I/O的影响,如果一个字本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net符串存储所占的存储空间更大,那么读取时也【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。就更耗时,如果数据量很大,那么char那原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net些空出来的多余存储空间实际上就拖慢了读取【作者:唐霜】未经授权,禁止复制转载。速度。不过有一个情况还是char更快,就【本文受版权保护】【原创内容,转载请注明出处】是char(16)和varchar(16转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。)所有记录都存满了16个字符,这个时候因【原创不易,请尊重版权】【版权所有,侵权必究】为varchar多存了字符长度,反而在存本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】储空间上又失去了优势,所以,如果你知道某【转载请注明来源】【本文首发于唐霜的博客】个值一定是多少位,例如md5散列,一定是【关注微信公众号:wwwtangshuangnet】【作者:唐霜】32位,那么可以考虑char(32)。
原创内容,盗版必究。【访问 www.tangshuang.n【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】et 获取更多精彩内容】网上还有一些说法,比如:MEMORY数据未经授权,禁止复制转载。【原创内容,转载请注明出处】表目前都使用固定长度的数据行存储,因此无本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。论使用CHAR或VARCHAR列都没有关【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】系。两者都是作为CHAR类型处理的。
【未经授权禁止转载】【版权所有,侵权必究】【版权所有】唐霜 www.tangshu【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。ang.net在使用text和blob数据类型时如何提本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net高查询性能
著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。虽然这里只提到了text和blob,但是本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】实际上这里可以扩展到所有字符串长度超过你原创内容,盗版必究。未经授权,禁止复制转载。认为比较大的一个值的时候的类型。比如va转载请注明出处:www.tangshuang.net【本文受版权保护】rchar(255)等,text和blo【版权所有,侵权必究】【版权所有,侵权必究】b也各自包含四种类型。我们不可能用tex转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。t类型直接去查询对比吧,因此,建议在需要原创内容,盗版必究。【未经授权禁止转载】利用text进行对比时,额外建一个字段,【版权所有】唐霜 www.tangshuang.net【本文受版权保护】用于保存这个text的散列值,可以是MD【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。5(),SHA1()或CRC32(),在【本文首发于唐霜的博客】【原创内容,转载请注明出处】检查某个值是否存在时,先通过程序端处理出【本文首发于唐霜的博客】【本文首发于唐霜的博客】散列值,再到数据库中去匹配,看看对应的值【原创不易,请尊重版权】原创内容,盗版必究。是否存在。如果这些值经常用于检索,你甚至【转载请注明来源】【关注微信公众号:wwwtangshuangnet】可以给这个散列值字段建立索引。
【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】【作者:唐霜】ngnet】【版权所有,侵权必究】【访问 www.tangshuang.n【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。et 获取更多精彩内容】转载请注明出处:www.tangshua【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netng.net如果你采用这种方法,还需要注意两件事,第【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。一件,散列值如果能通过算法生成数值型数据【转载请注明来源】转载请注明出处:www.tangshuang.net,就以数值型保存,因为我们都知道,检索数本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。值型比检索字符串快的多,而且,如果使用字【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】符串类型,进行><=这类查询本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】是没有意义的,因为这种比较查询会严重拖慢【版权所有】唐霜 www.tangshuang.net【转载请注明来源】查询速度;第二件,在查询时,select【转载请注明来源】本文作者:唐霜,转载请注明出处。时尽可能的过滤查询text或blob字段【原创内容,转载请注明出处】【作者:唐霜】,例如select * 这样的查询语句尽【作者:唐霜】原创内容,盗版必究。可能不用,因为这样用,即使你按照上述方法本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。建立了一个查询,但是在数据库从磁盘读取数转载请注明出处:www.tangshuang.net【本文受版权保护】据库过程中,仍然需要去把text或blo【转载请注明来源】【版权所有】唐霜 www.tangshuang.netb取出来,和你直接按老办法进行检索效果是原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。一样的。
著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】【本文首发于唐霜的博客】【原创内容,转载请注明出处】还有一个不是很容易让人忽略的事,就是te【原创内容,转载请注明出处】【版权所有,侵权必究】xt和blob在执行UPDATE时,可能著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。会出现很多冗余,导致数据库占用比较多的空未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。间,因此,我们需要偶尔使用OPTIMIZ本文作者:唐霜,转载请注明出处。原创内容,盗版必究。E TABLE优化清除冗余空间。不过,其【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】实我们可以想一下另外的办法,其中最好的办【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net法就是将原有记录删除,再新增一条记录。但【转载请注明来源】【原创不易,请尊重版权】是这可能会引起主键的变化,因此我们可以采本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】用一种更偏门的办法,将text和blob本文版权归作者所有,未经授权不得转载。【作者:唐霜】字段放到一个新表中,这个表中仅记录对应的【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。id,散列值和真正的文档值,而在原表中记著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。录散列值,这样,当更新(仅更新)文档时,本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】直接使用REPLACE INTO,根据i【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.netd,进行更新(插入),因为replace【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】 into更新数据时,会删除原始记录,创【本文首发于唐霜的博客】【原创不易,请尊重版权】建新记录,所以实际上就会清空原来的存储单著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。位,从而实现节省空间的目的。(这仅是一种著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】思路,未经验证~)
【原创内容,转载请注明出处】【原创内容,转载请注明出处】【本文受版权保护】【作者:唐霜】浮点数与定点数:float、double【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。、decimal
【未经授权禁止转载】转载请注明出处:www.tangshua转载请注明出处:www.tangshuang.net【版权所有,侵权必究】ng.net【版权所有】唐霜 www.tangshu【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。ang.net未经授权,禁止复制转载。浮点数,顾名思义,是浮动的,变动的,其值【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。会在程序运行中出现轻微的偏差,例如一个数【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。加上另一个数,再减去同一个数时,可能得到转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net的不是原数(虽然很接近)。而定点数就不存【转载请注明来源】原创内容,盗版必究。在这个问题。float、double、d本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。ecimal三种数据类型中,float、【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】double是浮点数,decimal是定【作者:唐霜】转载请注明出处:www.tangshuang.net点数。
【版权所有】唐霜 www.tangshu【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。ang.net【作者:唐霜】【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。在使用中,如果追求精度,必须使用deci【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.netmal,否则经过多次运算,很有可能导致数【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】据最后很不准确。
【原创内容,转载请注明出处】【作者:唐霜】2015-08-13 30305


