1.事务特性: 原子性>事务由原子的操作序列组成,所有操作要么成功,要么全部失败回滚 一致性>执行前后,数据库都是一致状态。比如在做多表操作时,要么都是事务后的新值,要么是事务前的旧值 隔离性>指多个用户并发请求时,不同的事务之间要相互隔离 持久性>指事务提交后,数据是永久性的。即便系统遇到故障,也不会丢失提交事务的操作。2.关于锁 myIsam使用表级锁,innodb使用行级锁。表锁开销小,加锁快,不会出现死锁,但是锁的粒度大,发生冲突的概率高,并发访问效率低。 行级锁开销大,加锁慢,有可能出现死锁,粒度小,发生冲突的概率低,并发访问效率比较高3.mysql索引 可以大幅度增加数据库的查询性能,在实际业务场景中,都会使用到。 索引代价:1>需要额外的磁盘空间来保存索引 2>对于插入、更新、删除等操作,会增加额外的开销 唯一索引:索引列中值必须唯一,可以是空值 主键索引:一种特殊的唯一索引,不可以是空值 普通索引:索引有相同的值 联合索引:多个字段组成的索引,保持着依次查询的查询使用的原则4.索引的实现方式: 1>B+树实现 2>R-tree 3>Hash 4>FullText5.mysql调优的4个纬度 1>针对数据库设计、表结构、索引设置进行优化 2>对业务中使用sql进行优化,调整where查询条件 3>对配置进行优化,如连接数的管理,索引缓存、查询缓存、排序缓存等进行优化 4>对硬件设备和操作系统优化,调整操作系统参数、加内存、升级固态硬盘、禁用swap (开启后,当别的程序内存不够时,会占用mysql存储空间)6.结构和索引的优化原则 1>保持表的数据量在KW级别 如果预计有更多数据,提前按用户或时间分库分表 2>保留扩展的前提下,选用较小的数据类型 如年龄选择tinyint不要使用int 3>将字段多的表分解 必要时加中间表,一张表超过40个字段不是一个好的设计 4>要满足第三范式,会拆出多表,查询时进行多表关联,会降低范式要求,在表中保存一定的冗余信息,要一定适度 5>为经常使用的字段加索引,创建联合索引、唯一索引等。 6>列字段尽量设置not null,mysql难以对null字段进行查询优化,会使索引、统计和值更加复杂,null值还会需要更多的存储空间以及特殊处理。7.sql语句的优化 1>查询最频繁的语句,通过慢查询日志发现需要进行优化的sql 2>学会利用分析工具explain分析语句的执行计划,是否用了索引、扫描了多少记录等。或者利用profile命令分析某个语句执行过程中的耗时 3>尽量的使用预处理语句,防止sql注入 4>避免使用select * ,尽量在有索引的字段上进行排序操作。