现在最流行的网站推广方式有哪些,wordpress 网站加载过慢,设计方案参考网站,一个服务器下怎么做两个网站吗存储引擎概念
在mysql当中数据库用不同的技术存储在文件中#xff0c;每一种技术都是使用不同的存储引擎机制#xff0c;索引技巧#xff0c;锁定水平#xff0c;以及最终提供的不同的功能和能力#xff0c;这些就是我们说的存储引擎
主要功能
1mysql将数据存储在文件系…存储引擎概念
在mysql当中数据库用不同的技术存储在文件中每一种技术都是使用不同的存储引擎机制索引技巧锁定水平以及最终提供的不同的功能和能力这些就是我们说的存储引擎
主要功能
1mysql将数据存储在文件系统中的一种方式和格式2存储引擎负责执行实际的数据I/O操作3存储引擎介于数据和文件系统之间数据会先保存到存储引擎再按照存储引擎的格式保存到文件系统
Mysql的存储引擎分类
INNODB5.5版本之后的mysql默认存储引擎也叫事务型速记引擎写入性能较好支持ACID事务的四大特性支持锁行锁表。MYISAM5.5之前的默认存储引擎插入数据的性能较高查询速度很优秀但是不支持事务也是他被淘汰的原因Memor所有数据都保存在内存的存储引擎插入数据更新数据查询数据速度很快但是占用内存空间比较大会占用和数据量成正比的内存空间而且mysql一旦重启内容很快就会丢失Csv由逗号分割数据的存储引擎他会在数据库子目录里为每一个数据表创建一个 .CSV文件他就是一种普通文本文件每个数据占用一个文本行但csv不支持索引Archive非常适合存储大量的独立的而且是历史数据的引擎因为他不需要经常读取插入的速度很快只是查询的效率比较低Blackhole黑洞引擎写入的任何数据都会消失
MYISAM和INNODB做个分析和对比
MYISAM 不支持事务也不支持外键只支持全文索引数据文件和索引文件是分开的访问速度快适用于查询和插入为主的应用 .frm : 存储的表结构 .MYD:存储的数据文件 .MYI索引文件 MYISAM的特点
1表级锁定更新数据时整个都将锁定2数据库在读写过程中是相互阻塞的即你不能对一个表又读又写
支持的存储格式
静态表固定长度表静态表时mysisam的默认存储格式静态表中字段都是非可变字段因此每个记录都是固定长度优点数据存储快方便缓存有了故障容易恢复缺点占用空间比较多
动态表可以包含可变字段记录的长度是不固定的优点占用空间比较少缺点频繁更新数据删除记录会产生碎片需要定期清理myisamchk -r 清除命令一旦出现故障恢复比较麻烦。
压缩表myisamchk 工具创建的占据的空间非常小每条记录都是单独压缩的 重点 INNODB
1支持事务支持4个隔离级别5.5之后是mysql的默认存储引擎2读写阻塞和隔离级别相关3支持高效的缓存索引以及缓存数据4表于主键以簇方式存储BTREE5支持外键约束5.5之后INNODB也可以支持全文索引6对硬件资源的要求比较高7支持行锁也可以支持表锁定全表扫描
有几个注意点
1如果使用like模糊查询会进行全表扫描并且送定整个表2对没有创建索引的字段进行增删改也会进行全表扫描锁定整个表查询可以3使用索引进行查询则是行级锁定
INNODB的特点
1不保存表的行数统计表的行数会扫描一边整个表来计算有多少行2自增长索引INNODB中必须包含只有该字段的索引3Delete 定空表它是一行一行删速度比较 truncate
使用场景
1业务需要事物的支撑2论坛微博对数据一致性比较高的场景3访问量和并发量比较高的场景INNODB支持缓存可以减少后台服务器的压力
三个文件
1表名.frm 表结构文件 2表名.ibd 既是数据文件也是索引文件3db.opt 表的属性文件
Innodb行锁和索引的关系以及表锁排他锁死锁
行锁 如果列名字段是一个普通索引会锁住索引行对应的主键一并锁住实际上就是行锁 如果使用的id是主键innodb对主键使用聚簇索引锁定整行的记录 锁定表要对一个非索引键进行操作当一个事务对非索引列进行操作因为要全表扫描过滤所有整张表都会被锁定另一个事务只能查排他锁一个事务在操作另一个事务的操作无法执行只能查排他锁只能加一个死锁 事务之间相互等待对方资源最后形成一个环路造成的使用for update 排他锁 可以形成死锁 发生死锁的时候数据库会自动选择一个事务作为受害者然后会先解锁死锁再回滚事务 mysql的默认死锁机制会中选择一个事务作为死锁的牺牲品直接终止其中一个事务但是不会自动回滚。
存储引擎只能innodbMysql默认隔离级别即可
如何尽可能避免死锁
1业务的逻辑要合理以固定的顺序访问表和行2如果食物的类型比较复杂要进行拆分在业务允许的情况下可以把大事务拆小分次执行3在同一事务中尽可能一次性锁定所有需要的资源可以减少死锁的概率4隔离级别如果要避免死锁可以用read commit 可以避免索引5添加合理索引可以减少死锁的概率
悲观锁
乐观锁不会有任何提示只是数据不能写入数据提交更新时他会进行校验如发生冲突最多也就数据不生效而已没有其他报错或卡顿卡停现象 一般来说我们会在表中配置一个version字段可以自增通过自增校验来查看数据是否冲突
也可用时间戳方式 索引和行锁之间的关系
非索引的锁表以及死锁
排他锁悲观锁
Innodb的机制和存储文件的格式