mysql字符串长度超过1w⽤什么类型_MySQL的数据类型
1.慢查询
当⼀个资源变得效率低下的时候,应该了解⼀下为什么会这样。有如下可能原因:1.资源被过度使⽤,余量已经不⾜以正常⼯作。2.资源没有被正确配置3.资源已经损坏2.MySQL数据类型
更⼩的通常更好:⼀般情况下,应该尽量使⽤可以正确存储数据的最⼩数据类型。更⼩的数据类型通常更快,因为它们占⽤更少的磁
盘、内存和cpu缓存,并且处理时需要的cpu周期也更少。
简单就好:简单数据类型的操作通常需要更少的cpu周期,例如整型⽐字符操作代价更低,因为字符集和校对规则(排序规则)使字符⽐
较⽐整型⽐较更复杂,使⽤整型存储IP地址。
尽量避免NULL:通常情况下最好制定列为NOT NULL,除⾮真的需要存储NULL值。如果查询中包含可为NULL的列,对mysql来说
更难优化,因为可为NULL的列使得索引、索引统计和值⽐较都更复杂。
很多MySQL的数据类型可以存储相同类型的数据,只是存储的长度和范围不⼀样、允许的精度不同,或者需要的物理空间(磁盘和内
存空间)不同。tiktokplugin下载
别名
MYSQL为了兼容性⽀持很多别名,例如integer、bool、numeric,他们都只是别名,虽然可能令⼈不解,但是不会影响性能。如果
建表的时候采⽤数据类型的别名,然后⽤show create table检查,会发现mysql报告的是基本类型,⽽不是别名。
mysql面试题汇总MySQL可以为整数类型指定宽度,例如int(11),对⼤多数应⽤这是没有意义的:它不会限制值的合法范围,只是规定了mysql的⼀
些交互⼯具(例如mysql命令⾏客户端)⽤来显⽰字符的个数。对于存储和计算来说,int(1)和int(20)是相同的。
字符类型
VARCHAR和CHAR是两种最主要的字符串类型。
VARCHAR:
varchar类型选⽤于存储可变长字符串,需要使⽤1或者2个额外字节记录字符串的长度,⽐定长类型更节省空间,因为它仅使⽤必要
的空间(例如越短的字符串使⽤越少的空间)。由于VARCHAR⾏是变长的,在UPDATE时可能使⾏变得⽐原来更长,这就导致需要做
额外的⼯作。
varchar的使⽤场景:
字符串列的最⼤长度⽐平均长度⼤很多;列的更新很少,所以碎⽚不是问题;使⽤了像utf-8这样复杂的字符集,每个字符都使⽤不同
的字节数进⾏存储。
CHAR:
CHAR类型是定长的,MySQL总是根据定义的字符串长度分配⾜够的空间。char适合于存储很短的字符串,或者所有值都接近同⼀
个长度。例如char⾮常适合存储密码MD5值,因为这是⼀个定长的值。对于经常变更的数据,char也⽐varchar更好,因为定长的
char类型不容易产⽣碎⽚。
⼤字段字符类型
blob和text都是为了存储很⼤的数据⽽设计的字符串数据类型,分别采⽤⼆进制和字符串⽅式存储。MySQL对blob和text列进⾏排序于其他类型是不同的:它只对每个列的最前max_sort_length字节⽽不是整个字符串排序。
尽量避免使⽤text和blob类型,如果实在⽆法避免,有⼀个技巧实在所有⽤到blob字段的地⽅都是⽤substring(column,length)将列值转换为字符串(在order by ⼦句中也适⽤),这样就可以使⽤内存临时表了。
但是要确保截取的⼦字符串⾜够短,不会使临时表的⼤⼩超过max_heap_table_size或tmp_table_size,超过以后Mysql会将内存临
时表转换为MyISAM磁盘临时表。
时间类型
timestamp类型保存了从1970年1⽉1⽇午夜以来的秒数,timestamp只使⽤4个字节的存储空间,因此它的范围⽐>
datatime⼩得多:只能表⽰从1970年到2038年。提供了from_unixtime函数把unix时间戳转换为⽇期、>
unix_timestamp函数把⽇期转换为时间戳。 有时候⼈们会将unix时间戳存储为整数值,这不会带来任何收益。⽤整数保存时间戳的
数据库排序多字段desc过程格式通常不⽅便处理,所以我们不推荐这么做。
标识符(identifier)
整数通常是标识列最好的选择,因为它们很快并且可以使⽤auto_increment;千万不要使⽤enum和set类型作为标识列;尽量避免
使⽤字符串类型作为标识列,因为他们很消耗空间,并且通常⽐数字类型慢。尤其是在MyISAM表⾥使⽤字符串作为标识列时要特别
⼩⼼,因为MyISAM默认对字符串使⽤压缩索引,这会导致查询慢得多。
特殊类型数据:IP地址字段(IPv4)
⼈们经常使⽤varchar(15)来存储ip地址,然⽽,它们实际上是32位⽆符号整数,不是字符串。MySQL提供INET_ATON()和
INET_NTOA()函数将ip地址在整数和四段表⽰形式之间进⾏转换。
3.数据库中的范式和反范式
在范式化的数据库中,每个事实数据会出现并且只出现⼀次;相反,在反范式化的数据库中,信息是冗余的,可能会存储在多个地⽅。范式化的优点:1)范式化的更新
范式化设计的schema的缺点是通常需要关联,较多的关联可能使得⼀些索引策略⽆效,例如,范式化可能将列存放在不同的表中,⽽这些
列如果在⼀个表中本可以属于同⼀个索引。
反范式的schema因为所有数据都在⼀张表中,可以很好地避免关联。缺点是update操作的代价⾼,需要更新多个表,⾄于这会不会
是⼀个问题,需要考虑更新的频率以及更新的时长,并和执⾏select查询的频率进⾏⽐较。
从另⼀个⽗表冗余⼀些数据到⼦表的理由通常是排序的需要。
缓存衍⽣值也是有⽤的。如果需要显⽰每个⽤户发了多少消息(像很多论坛做的),可以每次执⾏⼀个昂贵的⼦查询来计算并显⽰它;也可以在user表中建⼀个num_messages列,每当⽤户发新消息时更新这个值。
4.缓存表和汇总表
s缓存表和汇总表,实时计算统计值是⾮常昂贵的操作,因为要么需要扫描表中的⼤部分数据,要么查询语句只能在某些特定的索引上才能有效运⾏,⽽这类特定索引⼀般会对update操作有影响,所以⼀般不希望创建这样的索引。
使⽤缓存表和汇总表时,必须决定是实时维护数据还是定期重建,哪个更好依赖于应⽤程序,但是定期重建并不只是节省资源,也可
以保持表不会有很多碎⽚,以及有完全顺序组织的索引(这会更加⾼效)。
为什么javac运行不了5.物化视图
物化视图实际上是预先计算并且存储在磁盘上的表,可以通过各种各样的策略刷新和更新。MySQL并不原⽣⽀持物化视图。使⽤开源⼯具Flexviews可以⾃⼰实现物化视图。它由下⾯这些部分组成:
1)变更数据抓取功能,可以读取服务器的⼆进制⽇志并且解析相关⾏的变更。2)⼀系列可以帮助创建和管理视图的定义的存储过程3)⼀些可以应⽤变更到数据库中的物6.计数器表
如果应⽤在表中保存计数器,在更新计数器时可能会碰到并发问题。有⼀个技巧:将计数器保存在多⾏中,更新计数+1的操作改为随机选择⼀⾏进⾏更新,求计数值的时候,做⼀个sum求和。
7.加快ALTER TABLE操作的速度(表结构更改)
⼀般⽽⾔,⼤部分alter table操作将导致MySQL服务中断(锁表并重建表)。MySQL执⾏⼤部分修改表结构的操作⽅法是⽤新的结构round if函数怎么用
创建⼀个空表,从旧表中查出所有数据插⼊新表,然后删除旧表。这个操作可能需要花费很长时间。
不是所有的alter table操作都会引起表重建。理论上,MySQL可以跳过创建新表的步骤。列的默认值实际上存在表的.frm⽂件中,所以可以直接修改这个⽂件⽽不需要改动表本⾝。
approachissue听力⽐如使⽤ alter comlum改变列的默认值:
alert table tablenamealert column col1 set default 5;
这个语句会直接修改.frm⽂件⽽不涉及表数据,所以这个操作是⾮常快的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论