首页 > 其他分享 >09-索引和视图

09-索引和视图

时间:2023-07-30 22:15:32浏览次数:41  
标签:index sal 09 视图 索引 emp deptno

09-索引和视图

课程目标

掌握索引原理、索引的应用、 视图的概念、创建视图、修改视图、删除视图。

9.1索引原理

索引被用来快速找出在一个列上某一特定值的行。没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。对于一个有序字段,可以运用二分查找(Binary Search),这就是为什么性能能得到本质上的提高。MyISAM和InnoDB都是用B+Tree作为索引结构

(主键,unique 都会默认的添加索引)

9.2 索引的应用

1.创建索引

如果未使用索引,我们查询 工资大于 1500的会执行全表扫描,如下图9-1所示:

图9-1

什么时候需要给字段添加索引:

表中该字段中的数据量庞大

经常被检索,经常出现在where子句中的字段

经常被DML操作的字段不建议添加索引

索引等同于一本书的目录

主键会自动添加索引,所以尽量根据主键查询效率较高。

如经常根据sal进行查询,并且遇到了性能瓶颈,首先查看程序是否存算法问题,再考虑对sal建立索引,建立索引如下,如下图9-2所示:
create unique index 索引名 on 表名(列名); 

create unique index u_ename on emp(ename);
alter table 表名 add unique index 索引名 (列名); 

create index test_index on emp(sal);

图9-2

2.查看索引,如下图9-3所示:

show index from emp;

图9-3

3.使用索引,如下图9-4所示:

注意一定不可以用select * … 可以看到type!=all了,说明使用了索引

explain select sal from emp where sal > 1500;

条件中的sal使用了索引

图9-4

如上图:假如我们要查找sal大于1500的所有行,那么可以扫描索引,索引时排序的,结果得出7行,我们知道不会再有匹配的记录,可以退出了。
如果查找一个值,它在索引表中某个中间点以前不会出现,那么也有找到其第一个匹配索引项的定位算法,而不用进行表的顺序扫描(如二分查找法)。
这样,可以快速定位到第一个匹配的值,以节省大量搜索时间。数据库利用了各种各样的快速定位索引值的技术,通常这些技术都属于DBA的工作。

4.删除索引

drop index index_name on talbe_name

alter table table_name drop index index_name

alter table table_name drop primary key

其中,前两条语句是等价的,删除掉table_name中的索引index_name。

第3条语句只在删除primary key索引时使用,因为一个表只可能有一个primary key索引,

MySQL> alter table emp drop index test_index;

删除后就不再使用索引了,查询会执行全表扫描,如下图9-5所示:

图9-5

9.3 视图的概念

视图是一种根据查询(也就是select表达式)定义的数据库对象,用于获取想要看到和使用的局部数据。

视图有时也被成为“虚拟表”。

视图可以被用来从常规表(称为“基表”)或其他视图中查询数据。

相对于从基表中直接获取数据,视图有以下好处:

访问数据变得简单

可被用来对不同用户显示不同的表的内容

用来协助适配表的结构以适应前端现有的应用程序

视图作用:

提高检索效率

隐藏表的实现细节【面向视图检索】

如下图9-6所示:

图9-6

9.4 创建视图

如下示例:查询员工的姓名,部门,工资入职信息等信息。

select ename,dname,sal,hiredate,e.deptno from emp e,dept d where e.deptno= e.deptno and e.deptno = 10;

为什么使用视图?因为需求决定以上语句需要在多个地方使用,如果频繁的拷贝以上代码,会给维护带来成本,视图可以解决这个问题

create view v_dept_emp as select ename,dname,sal,hiredate,e.deptno from emp e,dept d where e.deptno = e.deptno and e.deptno = 10;

create view v_dept_avg_sal_grade as select a.deptno, a.avg_sal, b.grade from (select deptno, avg(sal) avg_sal from emp group by deptno) a, salgrade b

where a.avg_sal between b.losal and b.hisal; /*注意MySQL不支持子查询创建视图*/

9.5 修改视图

alter view v_dept_emp as select ename,dname,sal,hiredate,e.deptno from emp e,dept d where e.deptno = 20;

9.6 删除视图

drop view if exists v_dept_emp;

9.7 本章小结

本章主要阐述了MySQL中的视图。

标签:index,sal,09,视图,索引,emp,deptno
From: https://www.cnblogs.com/zxbin/p/17592158.html

相关文章

  • ES索引备份还原
    https://blog.csdn.net/weixin_43480441/article/details/128630478?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-128630478-blog-126509989.235%5Ev38%5Epc_relevant_sort&depth_1-......
  • 索引优化
    联合索引第一个字段如果是范围查询则不会走索引如果第一个查询条件用范围查询,那么MySQL会以为你查询的表数据比较多,那么它就会进行全表扫描而不进行索引,,但是如果第一个查询条件是主键范围查询的话,它依旧会走索引,不过在开发中应该不需要进行主键范围查询。主键范围查询EXPLAINS......
  • pytorch索引与切片
    indexinga=torch.randn(4,3,28,28)a[0].shape#torch.Size([3,28,28])a[0,0].shape#torch.Size([28,28])a[0,0,2,4]#tensor(0.6574)selectfirst/lastN这个a可以看成一个图片:[batch,RBG,h,w]a.shape#torch.Size([4,3,28,28])a[:2].shape#torch.Size......
  • django(视图层)
    一、三板斧'''HttpResponse返回字符串类型render返回html页面,并且在返回给浏览器之前还可以给html文件传值redirect重定向'''#视图函数必须返回一个HttpResponse对象正确#看三者的源码(render和redirect继承HttpResponse类)Theviewapp01.views.in......
  • mysql 简单进阶 ———— 多列索引[一]
    前文整理一下mysql的一些简单进阶技巧,来源于高性能mysql,但不是根据书的序列来的。正文有一个问题,那就是我们为什么要创建多列索引呢?这是要思考的一个问题。为什么创建多列索引,而不是创建多个单列索引。需要弄明白这个问题,那么就需要知道索引是如何工作的。为什么有索引这个......
  • Day09_列表类型
    1.list()类型转换用法和作用: 2.列表操作:正向取值、反向去之、可取也可以改、索引不存在则报错: 3.列表操作:列表追加值: 4.列表操作:列表插入值: 5.列表操作:extend用法两个列表元素合并、字符串合并到列表中: 6.列表操作:列表删除方式一del: 7.列表操作:列表删除方......
  • Mysql数据库中数据量特别大,读取特别慢,已经做了索引,怎么优化
    当MySQL数据库中的数据量特别大,读取操作变得特别慢,即使已经添加了索引,仍然需要进一步优化。下面是一些建议以及示例代码来优化这种情况:使用合适的索引:确保为频繁查询的列添加了合适的索引。可以使用EXPLAIN语句来分析查询的执行计划,检查是否正确使用了索引。示例代码:sqlCopycodeE......
  • SAP CDS view 定义的数据库视图和传统 SQL 语句定义视图的区别
    SAPCDS(CoreDataServices)是SAPHANA数据模型开发的一种技术。它提供了一种领域特定的语言,用于定义数据模型,以及对数据进行查询、转换和展示。与传统的SQL(StructuredQueryLanguage)相比,SAPCDSview语法具有许多独特的特点和优势。在本文中,我将详细比较SAPCDSview语......
  • 【环境属性AmbientValueAttribute】使用ShouldSerialize 和 Reset 方法定义默认值----
    今天和大家讲解下关于winform控件的 环境属性AmbientValueAttribute 开发,net自带标准控件库里面的Control基类里面有些属性会根据父容器的属性变化而变化的,其中最常用环境属性包括BackColor、ForeColor、Font、Cursor。在这里不得不吐槽微软把所有技术文档全放在一个网站,用他的......
  • 极具性价比的步进电机驱动芯片-TMC2226/TMC2209使用小结
    TMC2226/2209相对于TMC2660C、TMC5160来说,价格低了很多,同时功能并没有太多阉割。对比TMC5160,少了内部加减速曲线,电流足够(Ipeak=2.8A),相对5160而言功能也很足够,所以毫无疑问TMC2226是极具性价比的步进驱动芯片。让我们一起看看TMC2226/TMC2209的一些特点:1、配置接......