巧用视图
  a3psDOxotnDK 2023年11月02日 33 0


巧用视图



         写这篇文章的主要目的其实是想和大家分享下,项目中视图的妙用,因为搞Web的可能对这个 很了解,技术也可能比我强很多,所以这篇文章更适合对数据库知识 了解相对浅一些的人。所以此篇文章中的一些观点知识我个人的,如果有不对的地方欢迎大家吐槽。好了,下面长话短说开始进入正题。

        视图,其实在数据库中 是很常见的,那么主要用来做什么呢,有什么比较重要的作用呢?

        首先,简单。使用视图时,需要查询的 数据都是主要数据,一些不必要的字段是不需要显示的,大大简化了使用者对数据的理解。

        再者,优化性能。其实视图就是一张虚拟表,和我们正常的查询没什么大的区别。如果有一些查询需要经常的执行,并且需要复杂的表关联时,视图就可以大显身手了。写好视图创建语句后 ,每次在拿数据时,就可以直接像取一张表里的数据一样简单。

        其次,安全性,这点在大的项目中是比较重要的,尤其是数据库权限结构要求相对较高的系统。比如某表中的部分字段含有机密信息,不应当让低权限的用户访问到的情况,这时候给这些用户提供一个适合他们权限的视图,供他们阅读自己的数据就行了。

       还有一些其他的优点比如:逻辑数据独立性等,在此就不多说了。当然 还有一些缺点,不是所有的复杂处理都适用视图,借用网友的一句话:必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。 所以在使用时 要权衡使用场景,找到最佳的解决方案。

       上面的长篇大论也许大家看腻了,下面 开始实际讲解我遇到的实际例子。

       首先背景是这样的,需求很简单:系统要定时(2或3个小时)到在线检测的数据库中获取超标数据,如果企业连续3小时超标,则对其发出警报,否则对其提醒。不同企业有不同排口,不同排口排放不同污染物,不同污染物有不同的超标标准及异常标准。这些数据不可能都存在一张表,所以要从多张表里面获取数据,再将其关联,最终得到我们需要的数据。

       有人会说 这不是 很简单吗?一个关联sql  就搞定了,但是在线检测的数据量是很大的,600W+的  数据量。

       select top 1000   *  from 表名,查询时速度 是可以的,但是执行这句sql时 再试下速度:select top 1000   *  from 表明 order by 某一个字段(没有索引的项)。执行 速度 会让你大吃一惊。因为order by   需要 重新排序,大数据量时是很慢的,也很浪费资源。但是我的这个查询一定要用到 排序(因为是一定时间内的数据,而且基本表我不能动,不能创建索引之类的东西)。

        根据需求,其实我想要的数据只是几小时内的数据毛病不是所有的数据,所以根本不用排序所有的数据。所以要减少我的数据。

取出数据后再排序的。而不是取数据前排序 。此外,还有许多的sql优化方法,我就不再次赘述了,大把的  例子及博客 ,给大家一个连接:http://database.51cto.com/art/200904/118526.htm

之后就是达到另一个目的,如何区分3小时  不连续 和三小时连续的呢?

         此处先卖一个小官司,也是因为时间有限,先不将此我的方案与大家分享,欢迎大家留言吐槽,也希望各位能给出较好的方案,后续 我会将我的解决方案与大家分享,看看 谁的 更好一些。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xaeiTka4h8LY   2024年05月31日   31   0   0 字段MySQL
  xaeiTka4h8LY   2024年05月31日   44   0   0 MySQL数据库
  xaeiTka4h8LY   2024年05月17日   54   0   0 数据库JavaSQL
  xaeiTka4h8LY   2024年05月17日   54   0   0 数据库SQL
  xaeiTka4h8LY   2024年05月17日   38   0   0 MySQL数据库
  xaeiTka4h8LY   2024年05月31日   41   0   0 数据库mongodb
a3psDOxotnDK