mysql存储引擎的一点学习心得总结_MySQL
程序员文章站
2022-06-15 17:37:31
...
首先我们应该了解mysql中的一个重要特性——插件式存储引擎,从名字就可以看出在mysql中,用户可以根据自己的需求任意的选择存储引擎,实际上也是这样,即使在同一个数据库中,不同的表也可以使用不同的存储引擎。Mysql中支持的存储引擎有很多种,这个可以去baidu或者google,本文主要说两种比较常用的存储引擎,myisam和innodb。 myisam的特点是 1)索引和数据分开存储,myisam有三个文件(.frm文件,存储表定义;.MYI存储索引 my index; MYD存储数据 my data) 2)不支持事务以及外键 3)支持全文索引 4)支持数据压缩(myisam支持3种不同存储格式,静态表,动态表,压缩表) 5)Select和Insert效率较高,所以一般以Select和insert为主的应用使用myisam存储引擎。 6)表锁
innodb的特点 1)支持外键和事务 2)如果很多是update和delete操作,那么选择innodb是合适的。 3)数据和索引存储在一起。 4)innodb不支持全文索引 5)InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。 6)行级锁
在对于字符串存储的时候,如果是myisam建议使用固定长度数据列 如果使用innodb,建议使用varchar数据类型
================================华丽分割线===================================================
下面简单提一下mysql中字符集的选择
一般是这样的,如果数据库只是需要支持一般中文,那么使用gbk就够了,不需要使用uft8,原因是gbk一个汉字2个字节,utf8中一个汉字3个字节。 mysql的字符集有两个概念,一个是字符集,一个是校对规则 字符集用来定义存储字符串的方式 校对规则用来定义字符串的比较方式 如果校对规则是ci(比较时,大小写不敏感) cs(比较时大小写敏感),bin(二元,和字符编码有关)
如何修改一个数据库中的字符集呢? 如果没有数据,直接修改就是,但是如果数据库中已经存在数据,那么如何修改字符集呢? 1)导出表结构 2)手动修改导出的表结构(一个sql文件A.sql) 3)导出所有记录(B.sql) 4)修改B.sql中的set names utf8 5)使用新的字符集创建数据库 6)创建表 7)导入数据
innodb的特点 1)支持外键和事务 2)如果很多是update和delete操作,那么选择innodb是合适的。 3)数据和索引存储在一起。 4)innodb不支持全文索引 5)InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。 6)行级锁
在对于字符串存储的时候,如果是myisam建议使用固定长度数据列 如果使用innodb,建议使用varchar数据类型
================================华丽分割线===================================================
下面简单提一下mysql中字符集的选择
一般是这样的,如果数据库只是需要支持一般中文,那么使用gbk就够了,不需要使用uft8,原因是gbk一个汉字2个字节,utf8中一个汉字3个字节。 mysql的字符集有两个概念,一个是字符集,一个是校对规则 字符集用来定义存储字符串的方式 校对规则用来定义字符串的比较方式 如果校对规则是ci(比较时,大小写不敏感) cs(比较时大小写敏感),bin(二元,和字符编码有关)
如何修改一个数据库中的字符集呢? 如果没有数据,直接修改就是,但是如果数据库中已经存在数据,那么如何修改字符集呢? 1)导出表结构 2)手动修改导出的表结构(一个sql文件A.sql) 3)导出所有记录(B.sql) 4)修改B.sql中的set names utf8 5)使用新的字符集创建数据库 6)创建表 7)导入数据
上一篇: PHP做个满意度统计表,大家有什么思路没
下一篇: 数据库活动监控系列之数据库安全背景