当前位置: 首页 > 科技观察

告别刻板印象:SQL是你应该掌握的技能!

时间:2023-03-16 18:58:33 科技观察

本文转载自公众号《核心阅读》(ID:AI_Discovery)。根据2020年JetBrains开发者生态系统调查,56%的开发者在开发中使用SQL数据库或与之交互。但即便如此,大多数开发人员仍然将SQL概念视为第二选择,他们通常通过自己选择的语言进行交互,并且在设计中发挥的作用很小。总而言之,能够连接并运行基本查询就绰绰有余了。很多公司甚至有一个单独的数据库团队,专门负责数据库的设计和优化。笔者认为这是制约人们更深入学习SQL的原因:很多人都这样认为,SQL是别人用的工具。软件开发人员有足够的工具。但是这个行业充满了技能,你永远不知道接下来会发生什么。我们每天都与SQL打交道,所以最好多准备一些知识。另外,如果你在一家没有足够数据库团队资源的小公司工作,那么你的责任会更大。在面试中展示对您的数据库技能的信心可以引导您找到许多有趣的职业方向。与其他领域相比,我更喜欢SQL开发。从我早期与一群杰出的DBA实习开始,我就爱上了SQL。笔者在学校上过数据库课程,所以有一些基础知识,但实习期间所学的知识非常宝贵。我不仅意识到自己对数据的热情,而且期间获得的技术理解也为以后的每项工作提供了基础。大大增强。数据库开发和管理的内容很多,相关的高手也高人一等。这些可以帮助开发人员(不懂得灵活使用SQL的人)在SQL知识方面脱颖而出。根据笔者的经验,本文中的概念引用自MicrosoftSQLServer,这些概念同样适用于其他SQL数据库管理系统。规范化如果你在学校上过关系数据库课程,你一定见过“规范化”这个词。这是数据库设计的一个核心概念。但更重要的是,它让开发人员的生活更轻松。数据库规范化的主要思想是减少数据冗余,保证数据存储干净、合乎逻辑。数据库规范化的级别取决于数据库的“规范形式”。有多达六种规范形式(有争议),但真正需要理解的只有前三种。简单来说,主要规则如下:第一范式(1NF)规定单个字段应存储单个数据点,并且所有行都应唯一。不要在字段中存储事物列表,这些是单独的记录。第二范式(2NF)规定每个表都应该有一个主键列。创建一个唯一的ID。不要使用名称和地址作为组合键,只需为用户提供一个唯一的ID号或GUID。第三范式(3NF)声明函数传递依赖是不允许的。这可能是最复杂的一个,本质上意味着如果您有一个字段依赖于另一个字段,则该字段应该被分解到另一个表中。这允许更改外键-实际值无法更改。这里的重点是数据应该是最小的单位,因此将具有重复数据的大表拆分为具有易于搜索的键的小表,使过滤更有效,查询更直接,您的工作更轻松!数据库对象图源:unsplash如果你身兼数职,或者你的公司没有数据库团队,那么你可能负责数据库开发。在这种情况下,您应该很好地了解在不同情况下使用哪些类型的数据库对象。简而言之,数据库对象是可以使用创建脚本存储或访问数据的任何对象,最常见的示例是表,它是数据库的组成部分。这些显然是数据存储的方式。但是,还有其他类型的对象以不同的方式访问和转换数据。为您的工作使用尽可能最好的对象很重要。以下是适用于用例中对象的基本规则(索引本质上是数据库对象,因为它们会影响数据的存储和访问方式):存储过程:这是处理或转换数据的方式。如果您需要在一天中的特定时间或以特定节奏更新,您可以创建一个存储过程并以编程方式运行它。视图:视图本质上是从动态数据集中选择的存储查询。如果数据需要刷新或可能需要转换,我经常用视图替换缓存表。实际上不会存储任何更改,但可以添加计算字段,当您需要动态的最新数据时,视图是一个不错的选择。了解表、视图和存储过程后,您将能够处理大多数数据库开发任务。图源:unsplashindex你需要了解的第一个索引概念是聚集索引和非聚集索引的区别。ClusteredIndex:所有的数据都按照索引存储在表中。聚簇索引只能有一个,默认情况下主键是聚簇的。非聚集索引:将索引字段与表分开存储。这个索引字段指向存储在表中的数据,就像一本书的索引。要提高查询效率,就需要增加存储容量。非聚簇索引需要自己的存储空间,因为它们与表数据保持分离。仅索引需要过滤或连接的字段,以在存储和性能之间找到最佳平衡。索引是优化数据库性能的最佳方式。索引影响数据在页面中的存储方式。默认情况下,记录不按特定顺序存储,因此本质上索引字段允许数据以可预测的方式存储。当对该字段进行过滤时,查询将运行得更快,因为SQLServer确切地知道从哪里开始查找。可以为特定目的在一个字段上设置许多索引,但是如果我们想提高性能,我们通常会创建通用的非聚集索引。此外,如果创建了索引,就必须对其进行维护,插入、更新和删除都会导致索引碎片。因此,除非数据不更新,否则需要根据数据变化的频率重建索引。理想情况下,您应该使用预定的存储过程来执行此操作,以便事情始终顺利进行。创建索引的SQL语句非常简单。以下语句将在Orders表的给定字段上创建一个名为idx_orderdate的非聚集索引:CREATEINDEXidx_orderdateONOrders(OrderDate);阅读查询计划如果您想更深入地了解数据库性能,阅读查询计划很有用。运行查询时,SQLServer根据执行计划对其进行处理。您可以在运行查询时生成计划,或者如果查询已在运行,则查看缓存的计划以了解查询的每个步骤花费了多长时间。经验丰富的SQL向导可以从查询计划中读出很多细微差别。但是,专业开发人员需要知道的是搜索和扫描之间的区别。扫描:可以是索引扫描或表扫描,但无论哪种方式,SQLServer都必须扫描整个表或索引才能找到数据。搜索:对于索引搜索,SQLServer能够根据给定的索引来识别要查询的数据。搜索通常更有效率。如果你正在优化一个查询,你应该确定你在查询中扫描的位置并修复它。修复它们的最简单方法是确保索引字段已连接。如果可能在查询中使用的索引丢失,SQLServer会通知您。该建议将出现在查询计划的顶部。如果您右键单击建议索引的查询计划并选择“MissingIndexDetails”,您甚至可以生成索引创建脚本。图片来源:unsplash恭喜,你的SQL技能提高了!您现在可以使用这些概念来优化您的数据库并更有效地查询它。无论是从应用程序内部查询还是构建您自己的存储过程和视图,这些技巧都会让生活更轻松!