视图应用竟然还可以这么优化?不得不收藏(8)

一、视图概述(技术文):

(1)什么是视图?

视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。视图并不在数据库中以存储的数据值集形式存在,而是存在于实际引用的数据库表中,视图的构成可以是单表查询,多表联合查询,分组查询以及计算(表达式)查询等。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

(2)视图的优点:

a、简化查询语句(视图机制使用户可以将注意力集中在所关心地数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的的数据查询操作。)

b、可以进行权限控制

把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列等。

c、大数据表分表的时候,比如某张表的数据有100万条,那么可以将这张表分成四个视图。

按照对id取余计算

d、用户能以多种角度看待同一数据:

使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常必要的。

e、对重构数据库提供了一定程度的逻辑独立性:

视图可以使应用程序和数据库表在一定程度上独立。

(3)视图的缺点:

1)性能差:

把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间。

2)修改限制:

当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

(4)视图使用场景(其实就是需要用到视图上面的几个优点的时候):

1) 需要权限控制的时候。

2)如果某个查询结果出现的非常频繁,就是要经常拿这个查询结果来做子查询,使用视图会更加方便。

3)关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;

(5)视图的分类:

1)关系视图:

它属于数据库对象的一种,也就是最常见的一种关联查询;

2)内嵌视图:

它不属于任何用户,也不是对象,创建方式与普通视图完全不同,不具有可复用性,不能通过数据字典获取数据;

3)对象视图:

它是基于表对象类型的视图,特性是继承、封装等可根据需要构建对象类型封装复杂查询(官方:为了迎合对象类型而重建数据表是不实现的);

4)物化视图:

它主要用于数据库的容灾(备份),实体化的视图可存储和查询,通过DBLink连接在主数据库物化视图中复制,当主库异常备库接管实现容灾;

二、视图的使用(技术文):

1、创建视图

  1. create or replace view v_test asselect * fromuser;

加上OR REPLACE表示该语句还能替换已有的视图

2、调取视图

  1. select * from v_test;

3、修改视图

  1. alter view v_test asselect * from user1;

4、删除视图

  1. drop view if exists v_test;

5、查看视图

  1. show tables;

视图放在information_schema数据库下的views表里

6、查看视图的定义

show table status from companys like‘v_test‘;

在这之前,我们必须明确!增删改最终都是修改到基础表。且视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。(技术文)

三、视图的算法——存在两种执行的算法

a、Merge:合并的执行方式,每当执行的时候,先将我们的视图的sql语句与外部查询视图的sql语句,混合在一起,最终执行。

b、Temptable:临时表模式,每当查询的时候,将视图所使用的select语句生成一个结果的临时表,再在当当前临时表内进行查询。

四、视图使用注意点(技术文):

(1)修改操作时要非常非常小心,不然不经意间你已经修改了基本表里的多条数据;

(2)视图中的查询语句性能要调到最优;

(3)虽说上面讲到,视图有些是可以修改的。但是更多的是禁止修改视图。

对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系或者特殊的没有约束的一对多字段。还有一些特定的其他结构,这类结构会使得视图不可更新。

不可更改的情况如下:视图中含有以下的都不可被修改了。

(一)聚合函数(SUM(), MIN(), MAX(), COUNT()等)。

(二)DISTINCT。如下错误。

(三)GROUP BY

(四)HAVING

(五)UNION或UNION ALL

(六)位于选择列表中的子查询

(八)FROM子句中的不可更新视图

(九)WHERE子句中的子查询,引用FROM子句中的表。

(十)ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

时间: 2024-11-14 05:34:01

视图应用竟然还可以这么优化?不得不收藏(8)的相关文章

技术大佬:我去,你竟然还在用 try–catch-finally

二哥,你之前那篇 我去 switch的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好.但谁能保证 Java 不会再来一次重大更新呢,就像 Java 8 那样,活生生地把 Java 6 拍死在了沙滩上.Java 8 是香,但早晚要升级,我挺你,二哥,别在乎那些反对的声音. 这是读者 Alice 上周特意给我发来的信息,真令我动容.的确,上次的"我去"阅读量杠杠的,几个大号都转载了,包括 CSDN,次条当天都 1.5 万阅读.但

蘑菇加一物,赛过神仙药!你竟然还不知道?

蘑菇加一物,赛过神仙药!你竟然还不知道? 2016-03-30 导读 坊间有一种说法,叫"吃四条腿的不如吃两条腿的,吃两条腿的不如吃一条腿的".这一条腿指的就是菌菇类.那么美味的蘑菇究竟和谁一起吃赛过神仙药呢? 一.常见蘑菇的营养价值 蘑菇的种类有很多不仅仅是香菇一种,日常生活中的杏鲍菇.木耳.金针菇.草菇.平菇等都称为蘑菇,所以蘑菇又是一种统称. 鲜蘑菇的营养非常丰富,为高蛋白.低脂肪食品,对身体健康极有好处,有健脾胃.滋营养的功能,对久病体弱.慢性病病人是一种滋补品,可提高抗病能力

数据库理论之视图、事务、索引、优化查询

数据库理论之视图.事务.索引.优化查询 一.视图 灵魂三问 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果要频繁的使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view 视图名 as sql语句 注意:创建出来的视图只有表结构,数据来源还是原来的表 视图通常都是用于查询,所以尽量不要修改视图中的数据 思考:开发过程中应不应该使用视图? 不应该 二.触发器 命名规则及理论 在满足对某张表数据的增删改的情况下,自动触发的功

竟然还能用这些东西作为调味剂-猎人营长见识了

美味的食物是每一位吃货朋友的追求. 这里有一些你想随身携带的顶级食物,可以让你的食物保持新鲜.美味. 1.不加糖的可可粉 对巧克力的味道十分的渴望?考虑到体重问题不得不放弃巧克力?你可以尝试使用不加糖的可可粉制作美味的食物.你既尝到了巧克力的味道,有不用担心体重的问题.不加糖的可可粉制作的食物,不仅降低了糖含量,还提高了膳食纤维的摄入量.四分之一杯的份量仅含49卡路里,2.9克膳食脂肪和0.4克糖,同时含有4.2克蛋白质和7.1克膳食纤维. 在杏仁牛奶中加入一些不加糖的可可粉,撒上少许甜叶菊,加

前端优化还可以这么优化!

做了将近两年的前端工作,我也来总结总结一下在工作中学到的经验 . 首先了,跟着我的思维一起走,用户打开网页的这个动作,可以理解为 涉及到如下 两个大项    浏览器 和服务端 . 我先谈谈服务器端 ,如图 上图可以看出 访问页面动作(客户端) 在服务端拿HTTP .既然是拿东西那就好说了,(求更合适的比喻) 一:速度要快,前端能做的就是使用CDN服务了. 二:够轻,前端能做的事情有很多,比如压缩图片 压缩css js文件 html+css高效使用 (避免 table tr td  和  .div

微信竟然还能当笔记用!【微信高级教程8】

微信除了用来聊天沟通.刷朋友圈.看公众号外,很多朋友还不知道微信还能当笔记用吧?记笔记?没错,新版微信的收藏功能就隐藏这样的神秘技能.厦门就随ytkah一起来看看怎么玩吧 1.首先,我们登陆微信,点击底部的[我]选项,点击进入. 2.点击收藏 3.点击右上角的[+] 4.直接在微信笔记页面中点击光标,即可写笔记内容: 点底部第1个的“图片”选项,可选择要插入的图片.在插入图片的时候,也可以选择摄像头拍摄照片: ios版的微信添加新收藏比较不一样,直接把“拍摄照片”直接提出来,替换了“增加文件”的

印度卖家在亚马逊上卖牛粪饼,反响竟然还不错

三名来自印度拉贾斯坦邦哥打市的年轻企业家,将其经营了15年的家族乳牛畜牧企业提升到了一个新台阶,现在正在亚马逊网站上销售牛粪饼. APEI有机食品公司的三位董事之一Amanpreet Singh称:"我们发现了这个产业的潜力.在过去三个月里,我们一直在亚马逊销售牛粪饼." 这些牛粪饼大小约是普通盘子的1/4,每打的价格为120印度卢比.目前,他们平均每周销售15批牛粪饼,每批数量500至1000个. "孟买.德里和浦那的消费反响不错."Singh说. 据了解,制作牛

转 旧衣服不要扔,竟然还能这样改造,美翻了!

普通T恤用剪刀一剪,就是一件时尚个性的无袖上衣. 家里的小宝贝长得快,旧T恤穿不上做成拼接连衣裙,再怎么弄脏也不怕. 把T恤前后两面剪开,两块拼接,在中间挖一个跟腰围差不多大小的小洞,缝上橡皮筋,做成小裙子小宝贝可喜欢啦. 自己穿过的T恤,剪掉领口和袖口,在T恤上部一圈缝上褶皱,用剪下来的布料做成肩带,就可以变成宝贝的小裙子. 剪掉T恤袖子,挖大领口,用剪下来的布料把衣服缝成小结,穿出不一样的味道. 旧衣大改造,秒变新衣服! 先把领口剪至腰身大小,然后把袖子往前系一个美美的蝴蝶结,旧T恤就变成一

Docker竟然还能这么玩?商业级4G代理搭建实战!

时间过得真快,距离这个系列的上一篇文章<商业级4G代理搭建指南[准备篇]>发布的时间已经过了两个星期了,上个星期由于各种琐事缠身,周二开始就没空写文章了,所以就咕咕咕了. 那么在准备篇中,我们了解了一下搭建 4G 代理所需要的软硬件,也知道了各种选择的优劣势.现在,我们就可以开始实际搭建了,相信大家也是期待已久了. 基本思路 从这篇文章的标题中我们可以看出,这一次的搭建方案主要用到的是 Docker,你可能会很好奇,Docker 跟搭建 4G 代理有什么关系吗? 嗯,关系很大,我们把整件事情梳