id="c_n9"width="1920"height="990"style="position: fixed; top: 0px; left: 0px; z-index: -1; opacity: 0.5;">

数据库笔记04

数据库笔记04

索引

  1. 索引是数据库表中的字段添加的,是为了提高查询效率所存在的一种机制,一张表的一个字段可以添加一个索引,当然也可以对多个字段进行添加索引,index就相当于一本书的目录,是为了缩小扫描的范围而存在的一种的机制
  2. MySQL在查询的方式有两种:全表扫描,按照索引进行查找
  3. 在MySQL中index也是需要的进行排序的,这个排序所采用的方式是一种平衡二叉树的数据结构:左大右小
  4. 在任何数据库中主键上都会添加索引对象,当字段上存在unique约束时,同样也会创建索引
  5. 在数据库中,任何一张表的一个记录都在硬盘上存在一个物理存贮编号(相当于地址)
  6. 在MySQL中,index是一个单独的对象,不同的存储引擎index存放在不同的位置;但是无论其存放在那个位置,其采用的数据结构都是B-tree(自平衡二叉树)

索引的过程

譬如说:要寻找字段上的某一个值,先通过index进行查找,然后查询到一个物理编号,即可通过该编号来直接查询该记录,这样的查询速度会变快,从而避免全局搜索。

添加索引的条件

  1. 数据庞大
  2. 该字段常出现在where后面,也就是说该字段经常被查询
  3. 该字段很少使用DML语句,因为DML语句会导致索引重构

一般不推荐添加太多的索引,因为索引也是需要进行维护的,且太多的也是会降低查询的速度,一般推荐使用primary keyor unique约束的字段添加index来进行查询,这样其效率会快很多

创建过程

create index index_name on table_name(column_name);

删除过程:

drop index index_name on table_name;

使用alter进行创建:(普通索引)

alter table table_name add index index_name (字段名);

创建主键索引:

alter table table_name add primary key (字段名);

创建唯一索引:

alter table table_name add unique index_name (字段名);

查看是否使用index:使用explain关键字,后面接查询语句

create不能创建primary key索引,而使用alter可以创建多个

索引失效

  1. 在查询的过程中使用了like模糊查询
  2. 创建了复合索引,但是没有使用左边的索引
  3. 查询的过程中,where后面被索引字段使用了算数运算
  4. 查询的过程中,where后面被索引字段使用了函数
  5. 使用or时,只用or两边都存在索引时,才会按照索引去查询,否则就不会使用索引

索引是各种数据库中一种优化的重要手段

索引的分类

分类
单一索引 单个字段上添加索引
复合索引 多个字段联合添加索引
唯一索引 unique字段上添加
主键索引 primary key字段上添加

唯一性比较弱的字段没有必要添加index,用处不大

视图(view)

站在不同的角度去看待同一份数据

  • 创建视图:

    create view view_name as 跟dql语句;
    
  • 删除视图

    drop view view_name;
    
  • 对视图进行增,删,改,会导致原表的数据也会被更改

  • 利用视图可以创建由多张表关联的视图对象

  • 利用视图可以减化操作,可以减化开发的繁琐程度,使很长的一个SQL语句可以转化为视图对象从而对其进行操作,这样可以提高开发效率。

  • 视图是存放在硬盘上,

  • 增删改查:CRUD

DBA

  • 导出:mysqldump 数据库>路径 -u XXXX -p XXXX(在命令行中)
  • 导入:source 路径

数据库设计三范式

  1. 任何一张表都存在一个主键,每个字段都是不可再分
  2. 依赖于第一范式,要求所有非主键字段都依赖于主键,不能产生部分依赖
  3. 依赖于第二范式,要去所有非主键字段都依赖于主键,不能产生传递依赖

第二范式:一般需要外键约束来实现多对多多对多口诀:”多对多,三张表,关系表两个外键“

第三范式:同样也需要使用外键约束来解决;

一对多口诀:”一对多,两张表,多的表加外键“

一对一:可能因为数据过多,可能需要拆分为多张表,进行连接时,需要通过外键约束和unique约束来实现一一对应。

最终还是以客户的需求作为标准,三范式只是停留在理论上的,有时可能会存在冗余(空间)换速度(时间),因为表连接过多时,查询效率会降低。这样的话编写的sql语句就会变得简单,编写难度下降

posted @ 2022-02-11 20:59  hellozmc  阅读(41)  评论(0编辑  收藏  举报