分类 mysql 下的文章

一 概念

字符集
字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集(中文)、BIG5字符集、 GB18030字符集(中文)、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。

字符编码
字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。




- 阅读剩余部分 -

索引 说白了,索引问题就是一个查找问题。。。
数据库索引 ,是数据库管理系统中 一个排序的数据结构 ,以协助快速查询、更新数据库表中数据。
索引的实现通常使用B树及其变种B+树 。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。



- 阅读剩余部分 -

MySQL字符串最主要的类型是varcharchar

varchar 用于存储可变长字符串,比定长节省空间。原理是使用1或2个额外字节记录字符串的长度:列长小于等于255字节,则用1字节表,否则用2字节。例如varchar(10)的列的存储空间为11字节,varchar(1000)的列则需要1002字节。

但是由于变长的,在update时会做额外的工作。

合适的场景:字符串列的最大长度比平均长度大很多;列更新较少;使用了像UTF-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。

char 是定长的,MySQL 会删除所有的末尾空格。

合适的场景:很短的字符串,或者所有值接近同一个长度。如MD5值。经常更新的列char不容易产生碎片。定长的列最好用char,如身份证,手机号

长度限制:

char:最大长度为255,超过这个数值会提示:

MySQL said: Column length too big for column 'char' (max = 255); use BLOB or TEXT instead

varchar:最大长度与字符集有关:
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
使用utf-8mb4字符集,一个字符占用4个字节,最大长度是(65535-2)/4=16383 个字符。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

text:变长,最大长度65535字节。没有默认值。
mediumtext:最大长度16777215(2^24-1)字节。
longtext:最大长度2147483647(2^31-1)字节。

总结:varchar可变长,用额外1个或2个字节存储长度,节省空间;char定长,没有额外操作,更适合短且定长的列。

事务

InnoDB的事务符合ACID特性:

  • 原子性 atomicity
  • 一致性 consistency
  • 隔离性 i
  • 一致性 d

事务通过redo log(重做日志)和 undo log(回滚日志)实现。
redolog保证事务的原子性和持久性,undolog保证事务的一致性。redolog是物理操作,记录页的修改操作,undolog是逻辑日志,根据每行记录进行记录。


- 阅读剩余部分 -

InnoDB 事务性引擎,被设计用来处理大量短期事务。
类型:事务性
场景:处理大量短期事务
特性:自动崩溃恢复特性
InnoDB采用MVCC来支持高并发,表基于聚簇索引来建立,聚簇索引对主键查询有很高的性能,不过它的二级索引(非主键索引)都要包含主键列,所以如果主键列很大的话,其他索引也会很大。所以表中的索引很多的话,尽可能主键小。 InnoDB内部优化,磁盘读取数据的可预测读取,在内存自动创建hash索引来加速读操作的自适应hash索引,加速插入操作的插入缓冲区。 热备份,是其他引擎不具备的。

MyISAM
特性:全文索引,压缩,空间函数(GIS) 加锁与并发,MyISAM对表加锁,不是对行,读时对表加共享锁,写时加排它锁。 压缩表,表创建后不再修改,可压缩,好处是减少磁盘空间,减少磁盘I/O,提升查询性能。

Archive 只支持查询和插入。 缓存所有的写利用zlib压缩,节省磁盘空间,但是每次select都要全表扫描,所以适用于日志和数据采集类应用 Archive支持行级锁和缓冲区,可以实现高并发的插入;在一个查询开始直到返回表中存在的所有行数之前,会阻止其他select。

blackhole 问题较多,不推荐

CSV 将CSV文件作为表操作,CSV时逗号分隔值的文件,不支持索引,常用于数据交换。

Memory 在内存中,重启后表结构还在,数据会丢失。速度很快,使用场景:查找或映射、缓存周期性聚合数据、保存中间数据。 支持hash索引,支持表级锁,因此并发写入的性能较低