当前位置: 首页 > news >正文

数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_索引和视图

前言

        "<数据库原理及应用>(MySQL版)".以下称为"本书"中2.5节

引入

        索引和视图是两个独立的知识点,视图和前面的联系紧密一点,先说视图再说索引

2.5.2视图

        视图和查询语句区别不大,可以把视图理解成"成为文件的查询语句".

概念

        本书P65原话:视图(View)是由SELECT查询语句定义的一个逻辑表,只有定义没有数据,是一个"虚表".

        ---由概念的信息看出视图是SELECT查询得到的一个表.

        下面两段讲了可以通过视图操作数据库中的数据,但除了SELECT之外,在INSERT等方面受限

        ---数据库的数据维护可以用视图操作完成,但不建议用(也就是别这样用),可以省去一些学习

为什么建立视图

        本书P66讲了三点原因

1.提供各种数据表现形式,隐藏数据的逻辑复杂性并简化查询语句

        如果自己有数据库操作的界面,这点没有什么意义,见下图Navicat Premium Lite的导航界面

        可以看到"视图"和"查询"和"表"处于同一层.如果是自己使用,那么编写的"视图"语句和查询语句是一样的.而查询语句是可以单独保存的,现在又来个单独保存的视图语句,做法重复.

        输入本书建立视图的语句--"新建查询"中输入

CREATE VIEW ave_sal
AS
SELECT dname 部门名称,AVG(sal) 平均工资,MAX(sal) 最高工资,
MIN(sal) 最低工资,COUNT(*) 员工人数
FROM emp e,dept d 
WHERE e.deptno=d.deptno
GROUP BY dname;

        再输入查询语句,因为在建立视图时用了别名,所以排序用了dname的别名-部门名称;

SELECT * FROM ave_sal
ORDER BY `部门名称`;

        运行结果

        虽然意义不大,但视图的作用体现在:作成视图将查询语句文件化.

        再用简单的查询语句:SELECT * FROM ave_sal,即可得到搜索结果

2.提供某些安全性保证,简化用户权限的管理

        基于安全的需要,数据库通常要划分查询等级,有的表A能看B不能看,因此用户需要查看的权限.

        用到视图之后,可以简化用户权限,这点很有意义

3.对重构数据库提供一定的逻辑独立性

        因目前不知道重构数据库的概念和操作,所以暂时不做解读.

创建视图,修改视图和删除视图

        创建视图格式:

                CREATE VIEW 视图名[别名]

                AS

                SELECT 语句

        修改视图格式:

                CREATE OR REPLACE VIEW 视图名[别名]

                AS

                SELECT 语句

        ---修改视图自动覆盖创建的视图

        删除视图格式:

                DROP VIEW 视图名

其他

        如果视图只提供查询功能,其他内容可以不看.也就是不考虑用视图去修改表数据

2.5.1索引

索引总览

        索引和编程语言,框架一样,是"被实现的工具".应用程序员只管操作,不必关系底层实现.

        先了解索引的操作---创建索引,查看索引和删除索引,再分析索引的思路和实现.

索引的创建、查看和删除

创建索引

        格式:

        CREATE INDEX 索引名 ON 表名(列名1,列名2...)

        ---可一次创建含多列的索引.

        本书P64例2-50--单列索引

//为emp_c表创建ename索引
//emp_c表需要先创建
CREATE INDEX emp_ename_idx
ON emp_c(ename);

        本书P64例2-51--双列索引

//为emp_c表创建工作和工资索引CREATE INDEX emp_job_sal_idx
ON emp_c(job,sal);

        命名约定:索引名的命名一般采用 表名_列名_idx方式,将来维护方便.

查看索引

        格式:

        SHOW INDEX FROM 表名;

删除索引

        格式:

        DROP INDEX 索引名 ON 表名;

索引的原理和实现

本书P64第3段讲述了索引的原理:加快查询速度那么如何实现的呢?简单分析如下:

---以下小节内容为笔者视角,不保证准确.

假设有一个表table1(建表过程略),格式如下:

                                                        table1

id序号(int)ename名称(char(13)sal薪水(int)
1张三5000
2李四4500
n王五6000

建立查询:搜索比张三薪水高或者相等的人,查询语句如下:

SELECT id,ename FROM table1
WHERE sal>=(SELECT sal FROM table1 WHERE ename='张三');

执行后内层SELECT语句查找到一个数值5000,再执行sal>=5000.此时需要搜索sal.

如果不用索引,用C语言描述这个过程

/*伪代码*/
//声明指向数据文件的指针
File *p=Open("数据库文件路径");
//如果指针未指向文件末尾
while(p!=Null){
//指针偏移17个字节,id4个字节,ename13个字节
p=p+17;
//指针转换
int *ps=(int *)p;
//如果薪水符合要求,大于等于张三
if(sal>=*ps)放到新表中;
}

如果给薪水设定索引,给个数字17就可以.int sal_index=17,写出的代码可能稍有改变,

/*伪代码*/
//声明指向数据文件的指针
File *p=Open("数据库文件路径");
//指针转换
int *ps=(int *)p;
//如果指针未指向文件末尾
while(ps!=Null){
//指针偏移17个字节,id4个字节,ename13个字节
ps=ps+17;
//如果薪水符合要求,大于等于张三
if(sal>=*ps)放到新表中;
}

但即使是一点小的改变(只少一行代码),在庞大的数字搜索和网络中大量请求的时候,可能提高的效率也显著.或许细心的人已经发现,这两处代码是一致的,完全相同.是的,并没有看出索引的效果.但索引的用途可能在多个文件中有所体现.

使用索引的条件

        本书P65页写了很多,归根结底就两条:查询频繁,没有修改.

        这里的没有修改并不是完全不能改,而是表的结构几乎不改(DDL语句基本不用,列的数据类型不改,没有增加和删除列),在DML语句中INSERT和DELETE基本也不用,但UPDATE不会改变索引.综合说来,会改变索引值的语句,也可以用函数来解决.

小结

        索引和视图的一点浅析

        

        

        

http://www.dtcms.com/a/350588.html

相关文章:

  • 软件使用教程(二):VS Code的Copilot、Git设置与使用
  • 复制和下载飞书文档的方法教程
  • Unity开发如何实现换装技术
  • Ubuntu 14.10 i386桌面版安装教程(U盘启动详细步骤-附安装包下载)​
  • LeetCode 100题(3)(10题)
  • 实用电脑小工具分享,守护电脑隐私与提升效率21/64
  • CANopen - DCF(Device Configuration File) 介绍
  • 平安产险青海分公司助力国家电投黄河公司安全生产
  • 2024鸿蒙样题需要掌握的知识点
  • Shopify 集合页实现自定义广告位插入(支持分页)
  • C++ 指针与引用面试深度解析
  • k8s数据存储
  • PMP项目管理知识点-④ 项⽬整合管理
  • 3-2.Python 函数 - None(None 概述、None 应用场景)
  • Flink的CheckPoint与SavePoint
  • 使用 Prometheus 监控服务器节点:Node Exporter 详解与配置
  • 【2025】政策变动
  • 从认识Docker到安装
  • 深分页实战
  • 服务注册信息丢失ERROR 2003 (HY000):Can‘t connect to MySQL server on ‘localhost’(10061)
  • 数据结构青铜到王者第三话---ArrayList与顺序表(1)
  • 【MTCNN网络结构记忆卡片】--003nets.py
  • STM32之DMA详解
  • 专题:2025人工智能2.0智能体驱动ERP、生成式AI经济现状落地报告|附400+份报告PDF、原数据表汇总下载
  • 基于知识图谱的装备健康智能维护系统KGPHMAgent
  • 项目管理进阶——软件研发版本管理规范
  • 虚幻基础:摄像机功能
  • MongoDB分片集群自动化部署
  • uni-app 组件之自定义导航栏
  • 某鱼平台二手商品搜索接口开发实战:个人闲置与商家转让数据获取方案