首页 > 数据库 >第8节-MySQL索引与视图

第8节-MySQL索引与视图

时间:2022-11-24 23:23:51浏览次数:57  
标签:goods -- 视图 索引 student MySQL 数据

8.1、索引

8.1.1、索引优缺点

索引的优点:
1、可以提高查询数据的速度;
2、通过创建唯一索引,可以保证数据库表中每一行数据的唯一性;
3、在实现数据的参考完整性方面,可以加速表和表之间的连接;
4、在使用分组和排序子句进行数据查询时,可以减少分组和排序的时间;

索引的缺点:
1、创建和维护索引需要耗费时间,并且随着数据量的增加所耗费的时间也会增加;
2、索引需要占用磁盘空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸;
3、当对表中的数据进行增加﹑删除和修改操作时,索引也需要动态的维护,这样就降低了数据的维护速度;

8.1.2、索引引擎与类型

1、索引是在存储引擎中实现的,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。
2、依据MySQL中不同索引的存储类型
   BTREE
   HASH
3、MyISAM和InnoDB存储引擎只支持BTREE索引, BTREE索引也是MySQL中最常用的索引结构
4、MEMORY/HEAP存储引擎可以支持HASH和 BTREE索引。

8.1.3、索引分类

1、普通索引:是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。
2、唯一索引:索引列的值必须唯一,但允许有空值·如果是复合索引,则列值的组合必须唯一·主键索引是一种特殊的唯一索引,不允许有空值。
3、复合索引(又称组合索引或多列索引):复合索引是在数据表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。
4、全文索引:全文索引是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值。
5、空间索引:空间索引是对空间数据类型的字段建立的索引。

8.1.4、索引的建立原则

高效的索引有利于快速查找数据,而设计不合理的索引可能会对数据库和应用程序的性能造成障碍。因此,创建索引时应尽量考虑符合以下原则,便于提升索引的使用效率。
1、不要建立过多的索引
2、为用于搜索﹑排序或分组的列创建索引,而对于用作输出显示的列则不宜创建索引。
3、使用唯一索引,并考虑数据列的基数О数据列的基数是指它所容纳的所有非重复值的个数。
4、使用短索引,应尽量选用长度较短的数据类型。
5、选用字符串为索引时,应尽可能指定前缀长度。

8.1.5、索引管理

索引关键字:
unique:唯一索引
fulltext:全文索引
spatial:空间索引
index和key:索引关键字,二选一即可。

-- 创建表的时候,创建索引
create table goods(
id varchar(20),
code varchar(10),
name varchar(32),
unique index ix_code(code(10))
);


-- 创表完成后,再增加索引
create table goods(
id varchar(20),
code varchar(10),
name varchar(32)
);

-- 单一索引
alter table goods add unique ix_id(id);

-- 复合索引
alter table goods add unique ix_id_code(id,code);

-- 或者使用这种方法创建也可以
create unique index ix_id_code on goods(id,code);


-- 查询索引
show create table goods;
desc goods;
show index from goods;
show keys from goods;

-- 删除索引
alter table goods drop index ix_id_code;
drop index ix_id_code on goods;

-- 修改索引
在MySQL中并没有提供修改索引的直接指令,一般情况下,需要先删除掉原索引,再根据需要创建一个同名的索引
,从而变相地实现修改索引操作。

 

8.2、视图

8.2.1、视图场景

视图是从一个或多个数据表中导出的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。
这样,用户不用看到整个数据表中的数据,而只关心对自己有用的数据·视图可以使用户的操作更方便,并且可以保障数据库系统的安全性。

8.2.2、视图的概念

1、视图是一个虚拟的表,是从数据库中一个或多个表中导出来的表,其内容由查询语句定义。
2、同真实的数据表一样,视图由行和列组成
3、数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据均存放在原来的数据表中
4、使用视图查询数据时,数据库系统会从原来的表中取出对应的数据·图中的数据是依赖原始数据表中的数据,一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
5、在定义了一个视图之后,就可以把它当作表来引用。
6、视图永远依赖原数据表

8.3.3、视图特征

对于所引用的原始表来说,视图的作用类似于筛选。定义视图可以来自当前或其他数据库的一个或多个表,或者其他视图。
1、简单性
   视图可以大大简化用户对数据的操作。可以将经常使用的连接﹑投影﹑联合查询或选择查询定义为视图,这样在每次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可
2、安全性
   视图可以作为一种安全机制·通过视图用户只能查看和修改他们所能看到的数据,其他数据既不可见也不可访问。
3、逻辑数据独立性
   视图可以使应用程序和数据库表在一定程度上独立·程序可以建立在视图之上,从而程序与数据库被视图分割开来

8.3.4、视图管理

-- 创建视图
create view v_student as select * from student where sdept='020-电子信息工程系';

-- 调用视图
select * from v_student;

-- 查询视图
show table status like 'v_stu%'\G;
desc v_student;
show create view v_student;

-- 查询整个库的视图
show table status where comment='VIEW';

-- 修改视图
create or replace view v_student as select * from student where sdept='软件技术';

alter view v_student as select * from student where sdept='软件技术';

-- 删除视图
drop view v_student;
drop view if exists v_student;

-- 更新视图数据
update v_student set birthdate='2000-01-01' where name='xxxx'

-- 插入视图数据
insert into v_student values('95009','name','sex','1999-01-01 00:00:00')

-- 删除视图数据
delete from v_student where name='cccc';

 

标签:goods,--,视图,索引,student,MySQL,数据
From: https://www.cnblogs.com/ygbh/p/16923830.html

相关文章

  • 第9节-MySQL存储过程
    9.1、存储过程概述1、存储过程的定义定义一段完成特定功能的SQL语句集,经编译后存储在数据库中,用户可以通过指定的存储过程名称并给出参数来执行它,这样的语句集称为存......
  • 第10节-MySQL数据库的编程基础
     10.1、变量、运算符介绍用户变量:使用@开头。【set定义,会话有效】系统变量:使用@@开头。【declare定义,begin..end有效】局部变量:在存储过程中有效。--1、用户变......
  • 第11节-MySQL存储函数
    11.1、函数介绍1、函数是存储在服务器端的SQL语句的集合2、函数分为MySQL提供的内部函数和用户自定义医数两大类.MySQL提供了很丰富的内部函数·数学函数·字符串医......
  • MySQL字段约束条件
    昨日内容回顾MySQL字符编码及配置修改新版MySQL默认字符编码为utf系列,旧版本使用编码不统一,需要自己修改。修改使用配置文件较为简单,复制原配置文件改名为my.ini,文件......
  • MySQL数据库:6、约束的概述及语法
    Python基础之MySQL数据库目录Python基础之MySQL数据库一、约束概述1、为什么要约束2、什么是约束3、约束的分类4、查看当前表已有的约束二、约束语法及用法1、无符号2、......
  • MYSQL索引
    一、索引的概念索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。使用索引后可......
  • day41MySQL基础(3)
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多关系外键字段的建立多对多关系一对一关系无符号、零填充unsigned idintunsignedzerofill id......
  • 进入python的世界_day38_数据库——mysql约束条件、表关系
    一、字段约束条件1.无负号​ unsignedcreatetablet(idintunsigned);#不能添加负数2.零填充​ zerofillcreatetablet(idintzerofill);#填入得数据展......
  • MySQL之约束条件及表间关系
    MySQL之约束条件MySQL创建表的完整语法中,每个字段名后必须跟随字段类型,还可以选择跟随约束条件。本文将介绍常见的约束条件,首先先创建一个测试约束条件的库:createdatab......
  • mysql数据库(字段约束条件)
    什么是字段约束字段约束就是将字段的内容定一个规则,我们要按照规则办事约束描述关键字非空约束限制该字段的数据不能为nullnotnull唯一约束保证该字......