3.0优化查询-引入视图

在高效云平台下 我负责的是基础系统的学生部分。包括对学生信息的增删改查,学生统计部分主要是以图表的形式展示各种信息。本篇博客主要介绍一下 从传统的表查询到运用视图查询的简化过程。

首先,来看一下学生表关系。学生表关联宿舍,班级,专业方向外键,班级里包含专业,层次(研究生 本科 专科)。

       




需求

    查询学生信息:包括姓名学号,宿舍,班级,专业,专业方向等。我们可以看到后边的这些都是其它表里的。 有时候也会根据班级ID,专业ID等来查询所有的学生信息。

2.0的时候,都是通过EF导航属性来一个个查询。但还是诸多不便。这次3.0 改成用视图。将这些综合信息放在了一起。查询的时候毫不费力了。


这里建立视图的时候由于都是基于学生信息的,所以在表进行连接的时候应该用左连接进行。

以下是表连接语句。

  

<span style="font-size:18px;">SELECT     dbo.BasicClassEntities.ClassCode, dbo.BasicClassEntities.ClassName, dbo.BasicOrganizationEntities.OrganizationName, dbo.BasicOrganizationEntities.OrganizationID, 
                      dbo.BasicSchoolLevelEntities.LevelName, dbo.BasicRoomEntities.RoomName, dbo.BasicStudentEntities.StudentID, dbo.BasicStudentEntities.StudentNo, dbo.BasicStudentEntities.Name, 
                      dbo.BasicStudentEntities.UserCode, dbo.BasicStudentEntities.EntryTime, dbo.BasicStudentEntities.Origin, dbo.BasicStudentEntities.EntryPartyTime, dbo.BasicStudentEntities.Speciality, 
                      dbo.BasicStudentEntities.HealthCondition, dbo.BasicStudentEntities.ExamineeNumber, dbo.BasicStudentEntities.FatherName, dbo.BasicStudentEntities.MotherName, 
                      dbo.BasicStudentEntities.FatherPhone, dbo.BasicStudentEntities.MotherPhone, dbo.BasicStudentEntities.TrainDestination, dbo.BasicStudentEntities.Note, dbo.BasicStudentEntities.Status, 
                      dbo.BasicStudentEntities.Operator, dbo.BasicStudentEntities.TimeStamp, dbo.BasicStudentEntities.CreditCardNo, dbo.BasicStudentEntities.Sex, dbo.BasicStudentEntities.PoliticalStatus, 
                      dbo.BasicStudentEntities.PreviousName, dbo.BasicStudentEntities.Email, dbo.BasicStudentEntities.CellPhoneNumber, dbo.BasicStudentEntities.HomeTelephone, 
                      dbo.BasicStudentEntities.BirthPlace, dbo.BasicStudentEntities.HomeAddress, dbo.BasicStudentEntities.Nation, dbo.BasicStudentEntities.RoomID, dbo.BasicStudentEntities.DirectionID, 
                      dbo.BasicStudentEntities.ClassID, dbo.BasicStudentEntities.IsEnabled, dbo.BasicStudentEntities.Image, dbo.BasicDirectionEntities.DirectionID AS Expr1, dbo.BasicDirectionEntities.DirectionName, 
                      dbo.BasicDirectionEntities.DirectionCode, dbo.BasicRoomEntities.RoomID AS Expr2, dbo.BasicSchoolLevelEntities.SchoolLevelID
FROM         dbo.BasicStudentEntities LEFT OUTER JOIN
                      dbo.BasicDirectionEntities ON dbo.BasicStudentEntities.DirectionID = dbo.BasicDirectionEntities.DirectionID LEFT OUTER JOIN
                      dbo.BasicClassEntities ON dbo.BasicStudentEntities.ClassID = dbo.BasicClassEntities.ClassID LEFT OUTER JOIN
                      dbo.BasicRoomEntities ON dbo.BasicStudentEntities.RoomID = dbo.BasicRoomEntities.RoomID LEFT OUTER JOIN
                      dbo.BasicOrganizationEntities ON dbo.BasicClassEntities.OrganizationID = dbo.BasicOrganizationEntities.OrganizationID LEFT OUTER JOIN
                      dbo.BasicSchoolLevelEntities ON dbo.BasicOrganizationEntities.SchoolLevelID = dbo.BasicSchoolLevelEntities.SchoolLevelID</span>



 唯一需要注意的是 以上连接语句中 LEFT OUTER JOIN   。没有了复杂的查询之后,以后开发和维护都方便多了。当然最重要的不是建立了一个视图,而是去用心的改进自己的不足。不将就是源动力。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: Spark 3.0版本中的Spark SQL是一个用于处理结构化数据的模块,它提供了一种基于SQL的接口,可以方便地进行数据查询、过滤、聚合、连接等操作。Spark SQL还支持将结构化数据与非结构化数据(如JSON、Parquet、Avro等)进行无缝集成,同时还提供了一些高级功能,如分区、分桶、窗口函数等。Spark 3.0版本中的Spark SQL引入了一些新特性,如动态分区、动态分桶、动态过滤等,可以进一步提高数据处理的效率和灵活性。 ### 回答2: Spark 3.0版本中的SparkSQL是一个用于处理结构化数据的分布式查询引擎。它提供了一种基于SQL语言的API,使得开发人员可以使用SQL语句对数据进行查询、转换和分析。 SparkSQL具有以下几个主要特点: 1. 高性能:SparkSQL利用了Spark的弹性分布式计算模型,能够立即处理大规模数据。它通过将查询计划转换为可以在分布式集群上执行的任务来实现高效的查询。 2. 兼容性:SparkSQL兼容Hive,可以直接读取和查询Hive表。它还支持多种文件格式,包括Parquet、ORC、Avro等。 3. 多语言支持:SparkSQL支持多种编程语言,包括Scala、Java、Python和R。这使得开发人员可以使用他们熟悉的语言进行数据查询和分析。 4. 数据源集成:SparkSQL提供了丰富的数据源接口,可以轻松地从各种数据源中读取和写入数据,包括关系型数据库、Hive、HDFS、S3等。 5. 支持流数据处理:SparkSQL不仅可以处理静态的批处理数据,还可以处理实时的流式数据。它提供了结构化流处理(Structured Streaming)功能,可以将流数据视为连续的表,并对其进行查询和转换。 总之,SparkSQL是Spark 3.0版本中的一个重要组件,它提供了一种灵活、高效的方式来处理和分析结构化数据。无论是处理批量数据还是实时流数据,SparkSQL都能在分布式集群上提供高性能的查询和分析能力。 ### 回答3: Spark 3.0版本的Spark SQL是Spark生态系统中的一个重要组件。它提供了用于在Spark上进行结构化数据处理的高级接口。 Spark SQL支持多种数据源,包括Hive、Avro、Parquet、ORC、JSON等,可以方便地读取和写入这些格式的数据。通过Spark SQL,用户可以使用SQL语句来查询、分析和处理数据,同时还能够使用DataFrame和Dataset API进行更灵活和更高级的数据操作。 Spark SQL还提供了一个优化器,能够对SQL查询进行优化,包括谓词下推、投影下推、列剪裁等,以提高查询的性能。此外,Spark SQL还提供了支持多种文件格式的自动schema推断功能,使得用户可以在没有定义表结构的情况下直接读取文件。 在Spark 3.0中,Spark SQL引入了更多的功能和优化。其中包括支持数组和Map类型的数据操作、支持规范化和反规范化数据、支持视图和临时表、支持动态分区写入等。此外,Spark 3.0引入了Catalyst优化器的新版本,进一步提升了查询性能。 总之,Spark 3.0版本的Spark SQL为用户提供了一个强大而灵活的数据处理工具,在处理大规模结构化数据时具有高性能和易用性的优势。无论是在数据分析、数据仓库建设还是在机器学习和深度学习等领域,Spark SQL都是一款非常有价值的工具。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值