告别刻板印象:SQL是你必须掌握的技能

数据库 SQL Server
据2020年JetBrains开发者生态系统调查显示,有56%的开发者在开发中使用SQL数据库或与SQL数据库进行交互。但即便如此,大多数开发人员仍将SQL概念视为第二选择,他们通常通过自己选择的语言进行交互,而且在设计中作用不大。总而言之,能够连接并运行基本查询就足够了。

本文转载自公众号“读芯术”(ID:AI_Discovery)

 据2020年JetBrains开发者生态系统调查显示,有56%的开发者在开发中使用SQL数据库或与SQL数据库进行交互。但即便如此,大多数开发人员仍将SQL概念视为第二选择,他们通常通过自己选择的语言进行交互,而且在设计中作用不大。总而言之,能够连接并运行基本查询就足够了。

许多公司甚至还有一个独立的数据库团队,负责数据库的设计和优化。笔者认为这是限制人们更深入地学习SQL的原因:很多人是这样想的,SQL是别人使用的工具。软件开发人员的工具够多了。

但这个行业技多不压身,你永远不知道接下来遇到什么状况。我们每天都与SQL进行交互,因此,储备更多的知识有备无患。此外,如果所在的公司规模小、没有足够的数据库团队资源,那么你的责任将更大。在面试中展现出你对数据库使用技巧很自信,会带你通往许多有趣的职业方向。

相比较其他领域而言笔者更喜欢SQL开发。我早期的实习就是与一群杰出的数据库管理员共事,从此爱上SQL。笔者在学校上过数据库课程,因此有一些基本知识,但在实习期间学到的东西是无价的,不仅让我意识到自己对数据的热情,期间收获的技术理解也为之后的每项工作大大增色。

数据库开发和管理内容很多,相关专家也是妙笔生花,这些可以帮助开发人员(不会灵活运用SQL)在涉及到SQL知识时脱颖而出。根据笔者经验,本文中的概念引用自Microsoft SQL Server,这些概念也适用于其他SQL数据库管理系统。

规范化

如果你在学校选修过关系数据库的课程,那你肯定见过“规范化”一词。这是数据库设计的核心概念。但更关键的是,它能使开发人员的生活更轻松。

数据库规范化的主要思想是减少数据冗余并确保数据存储整洁、有逻辑。数据库规范化的级别取决于数据库的“规范形式”。迄今有最多六种规范形式(有争议),但实际需要了解的只是前三种。简单来说,以下是主要规则:

  • 第一范式(1NF)指出单个字段应存储单个数据点,并且所有行均应唯一。不要在字段中存储事物列表,这些属于个人记录。
  • 第二范式(2NF)指出每个表应具有单个主键列。创建唯一的ID。不必使用名称和地址作为复合键,只需给用户提供唯一的ID号或GUID。
  • 第三范式(3NF)指出不允许功能传递依赖项。这条可能是最复杂的一项,从本质上意味着如果有一个依赖于另一个字段的字段,则应将该字段分解到另一个表中。这允许外键更改-不能更改实际值。

这里的重点是数据应该是最小单位,因此具有重复数据的大表将拆分为具有易于搜索的键的较小表,从而使过滤更有效、查询更直接,你的工作也会更加轻松!

数据库对象

如果你身兼数职,或者公司没有数据库团队,那么你可能会负责数据库开发。这种情况下,你应该不同情况下使用哪种类型的数据库对象有很好的了解。简言之,数据库对象是可以使用创建脚本存储或访问数据的任何内容,最常见的例子就是表格,它是数据库的组成部分。这些显然是数据存储的必经之路。

但是,还有其他类型的对象以不同的方式访问和转换数据。使用最好的对象进行工作很重要。下面是使用案例中应用对象的基本规则(索引本质上是数据库对象,因为它们会影响数据的存储和访问方式):

  • 存储过程:这是处理或转换数据的必经之路。如果需要在一天中的特定时间或以特定的节奏进行更新,则可以创建存储过程,然后按程序运行。
  • 视图:视图本质上是一个存储的查询,可以从动态数据集中进行选择。如果数据需要刷新或可能转换,笔者常用视图替换缓存的表。实际上并没有存储任何更改,但可以加入计算所得的字段,当你需要动态的最新数据时,视图就是一个不错的选择。

了解了表、视图和存储过程之后,你将能够处理大多数数据库开发任务。

 

索引

首先需要了解的索引概念是聚集索引和非聚集索引之间的区别。

  • 聚集索引:根据索引将所有数据存储在表中。只能有一个聚集索引,默认情况下,主键为聚集。
  • 非聚集索引:将索引字段与表分开存储。该索引字段指向表中存储的数据,就像书的索引一样。

要提高查询效率,就要增加存储量。非聚集索引需要自己存储,因为它们与表数据保持独立。仅索引需要过滤或加入的字段,以便在存储和性能之间找到最佳平衡。

索引编制是优化数据库性能的最佳方法。索引会影响数据在页面中的存储方式。默认情况下,记录不会以特定的顺序存储,因此本质上对字段建立索引就能使数据以可预测的方式存储。在该字段上进行筛选时,查询将运行得更快,因为SQL Server知道从那个确切的位置开始查找。

可以为特定目的在字段上设置许多索引,但是如果要提高性能,我们通常会创建通用的非聚集索引。此外,如果要创建索引,就必须进行维护,插入、更新和删除会造成索引碎片。

因此,除非数据没有更新,否则就需要根据数据更改的频率来重建索引。理想情况下应该使用计划的存储过程来执行此操作,以便始终保持运行稳定。

创建索引的SQL语句非常简单。下面的语句将在Orders表的给定字段上创建一个名为 idx_orderdate的非聚集索引:

 

  1. CREATE INDEX idx_orderdate ON Orders (OrderDate); 

读取查询计划

如果想更深入地了解数据库性能,读取查询计划非常有用。运行查询时,SQL Server会根据执行计划对其进行处理。你可以在运行查询时生成计划,或者如果查询已在运行,则查看缓存的计划,可以查看在查询的每个步骤上花费了多长时间。

有经验的SQL向导可以从查询计划中读取很多细微差别。但是,专业的开发人员需要知道的是搜索和扫描之间的区别。

  • 扫描:可以是索引扫描或表扫描,但是无论哪种方式,SQL Server都必须扫描整个表或索引以查找数据。
  • 搜索:对于索引搜索,SQL Server能够基于给定的索引来识别要查询的数据。

搜寻通常更有效。如果要优化查询,则应确定查询中扫描的位置并进行修复。解决它们的最简单方法是确保加入了索引字段。

如果缺少查询中可能使用的索引,SQL Server会发出通知。该建议将出现在查询计划的顶部。如果右键单击建议索引的查询计划,然后选择“缺少索引详细信息”,甚至可以生成索引创建脚本。

恭喜,你已经提高了SQL技能!现在可以使用这些概念优化数据库并更有效地进行查询。无论是从应用程序中查询还是构建自己的存储过程和视图,这些技巧都会使工作更加轻松!

 

责任编辑:华轩 来源: 读芯术
相关推荐

2021-01-04 10:04:23

SQL数据库开发

2020-11-08 14:40:37

程序员编程

2010-09-08 09:19:54

2017-12-06 10:43:51

程序员软技能

2018-01-31 22:30:05

数据科学家数据专家工程师

2012-07-10 09:39:28

2023-08-08 08:08:42

PythonWeb开发

2021-07-18 08:23:47

校招git编程

2019-06-20 17:39:12

Android启动优化

2016-12-06 08:20:27

科技新闻早报

2011-05-12 13:00:10

Web开发者

2020-12-10 11:00:37

JavaJVM命令

2021-10-21 08:13:11

Springboot

2011-05-20 10:26:51

2017-03-30 16:03:06

Linux运维工程师技能

2021-03-02 11:40:17

Windows微软技巧

2024-10-16 13:30:00

2020-04-08 17:10:03

GitHub代码开源

2020-08-11 17:14:31

数据库SQL技术

2019-11-12 14:18:56

PythonWord设计
点赞
收藏

51CTO技术栈公众号