索引

索引作用

约束+加速查找

普通索引  :加速查找

主键索引 : 加速查找 约束 不能为空+不能重复

唯一索引  : 加速查找 约束  不能重复

联合索引(多列): 

联合主键索引 

联合唯一索引

索引的工作原理(hash和btree)

答:索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后找到相匹配的数据就把他放到结果集中,直到全表扫描完。而建立索引之后,会将建立索引的KEY值放在一个n叉树上(BTree)。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索

索引:
id 创建额外文件(某种格式存储)
name 创建额外文件(某种格式存储)
email 创建额外文件(某种格式存储) create index ix_name on userinfo3(email);
name email 创建额外文件(某种格式存储)

索引种类(某种格式存储):
hash索引: 多一个文件存放起来
单值快
范围
btree索引: btree索引
二叉树

索引的缺点:

创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大

创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大(数据表占据的是数据库的数据空间)

会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长

 

你认为什么样的表和列需要建立索引?

答:总的来说就是数据量大的,经常进行查询操作的表要建立索引

 

 1.索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

 

 

 

 

 

 

 

 

 

关于数据库引擎的介绍

最主要的就是MYISAM 和Innodb

Innodb提供了对数据库事务的支持,行级锁和外键的约束,它本身实际上是基于Mysql后台的完整的系统,它的设计的目标就是处理大数据容量的数据库系统

Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是,该引擎是不支持全文搜索的。

MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。

如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首先。

 

 

 

什么是事务?

事务由一个或多个sql语句组成一个整体,如果所有的语句执行成功那么修改将会全部生效,如一条sql语句将销量+1,下一条再+1,倘若第二条失败,那么销量将撤销第一条sql语句的+1操作,只有在该事务中所有的语句都执行成功才会将修改加入到数据库中

事务的特性

事务具体四大特性,也就是经常说的ACID 
1. 原子性(Atomicity) 
  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 
   
2. 一致性(Consistency) 
  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

  拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

3.隔离性(Isolation) 
  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

4.持久性(Durability) 
  持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。Mysql中会保存有相应的操作日志,即使遭遇故障依然能够通过日志恢复最后一次更新。

1.第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式

第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关.
如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式

第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关.

主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引

外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据

原文地址:https://www.cnblogs.com/zhange000/p/9289018.html