且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式 建立第一第二范式上。
InnoDB支持事务,MyISAM不支持。
InnoDB支持外键,而MyISAM不支持。
InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。而MyISAM是非聚集索引,数据文件是分离的, 索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用 一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。
Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高。
多条sql语句,要么全部成功,要么全部失败。
原子性:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功, 整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返回初始 状态。
一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。 如A转账100元给B,不管操作是否成功,A和B的账户总额是不变的。
隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰 .
持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中。
索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书 前面的目录,能加快数据库的查询速度。
普通索引:主要以B+树和哈希索引为主,任务是加快对数据的访问速度,常用于查询和排序的条件,值可以为空并没有唯一性的限制。
唯一性索引:与普通索引类似,不同的是唯一性索引,索引列的值必须是唯一的,但可以为空。
主键索引:主键索引是一种特殊的唯一性索引,在定义主键是自动创建,是创建在主键上的索引,所有属性列唯一而且不能为空。
全文索引:MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。
B+树索引
聚簇索引
非聚簇索引
联合索引
全文索引
哈希索引
优点:
提高查询数据的速度,降低数据库的IO成本。
降低数据排序的成本,降低CPU的消耗,索引已经将数据排序好
缺点:
占用多余存储空间
降低数据更新时候的速度,更新数据也需要去更新索引的数据
叶子节点存放的是该行完整的行记录,这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。
优点:
数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快。
聚簇索引对于主键的排序查找和范围查找速度非常快。
缺点:
插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。
更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。
叶子节点上存放的只有索引列和主键数据,查询的列不在索引列中需要回表进行查询。
什么是前缀索引?
语法:index(field(10)),使用字段值的前10个字符建立索引,默认是使用字段的全部内容建立索引。
前提:前缀的标识度高。比如密码就适合建立前缀索引,因为密码几乎各不相同。
索引不是越多越好。
不要对经常变动的数据加索引。
小数据量的表不需要加索引。
索引一般加在常用来查询的字段上。