当前位置: 首页 > news >正文

SQL Server进阶知识

🙈作者简介:练习时长两年半的Java up主
🙉个人主页:程序员老茶
🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭 格言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手,点个关注不迷路,感谢宝子们一键三连

目录

  • 课程名:SQL Server
    • 内容/作用:知识点/设计/实验/作业/练习
    • 学习:SQL Server进阶知识
  • SQL Server进阶知识
    • 1. 索引优化
      • 1.1 创建索引示例
      • 1.2 覆盖索引
      • 1.3 索引筛选器
      • 1.4 索引动态管理
    • 2.查询优化
      • 2.1 查询提示
      • 2.2 统计信息更新
      • 2.3 查询重写
    • 3. 分区表
      • 3.1 创建分区表示例
    • 4. 事务处理
      • 4.1 事务处理示例
    • 5. 触发器
      • 5.1 创建触发器示例
    • 6. 存储过程和函数
      • 6.1 创建存储过程示例
    • 7. 视图
      • 7.1 创建视图示例
    • 8.性能监控和调优
      • 8.1 执行计划分析
      • 8.2 事件监视

课程名:SQL Server

内容/作用:知识点/设计/实验/作业/练习

学习:SQL Server进阶知识

SQL Server进阶知识

SQL Server 是一款功能强大的关系型数据库管理系统,具有丰富的进阶知识和技术。在索引优化方面,覆盖索引、索引筛选器和索引动态管理是关键的优化手段,能够有效提高查询性能。而在查询优化方面,通过使用查询提示、定期更新统计信息以及查询重写等方式,可以优化查询执行计划,提升查询效率。此外,性能监控和调优也是至关重要的,通过执行计划分析和事件监视等手段,可以实时监测数据库性能并及时发现潜在问题。综合运用这些进阶知识,可以有效提升 SQL Server 数据库的性能和稳定性,满足不同场景下的业务需求。

1. 索引优化

索引是数据库中用于提高查询速度的数据结构。在SQL Server中,可以使用以下几种类型的索引:

  • 聚集索引:数据按照索引顺序存储在磁盘上,适用于范围查询和排序查询。
  • 非聚集索引:数据存储在磁盘上的随机位置,适用于全文搜索和等值查询。
  • 覆盖索引:包含所有需要查询的列的索引,适用于只读操作。

1.1 创建索引示例

-- 创建一个聚集索引
CREATE CLUSTERED INDEX idx_employee_lastname ON dbo.Employees (LastName);-- 创建一个非聚集索引
CREATE NONCLUSTERED INDEX idx_employee_age ON dbo.Employees (Age);-- 创建一个覆盖索引
CREATE FULLTEXT INDEX idx_employee_fulltext ON dbo.Employees (FullTextColumn);

1.2 覆盖索引

覆盖索引是指一个查询中所需的所有列都可以从索引中获取,而无需访问表数据。这可以减少查询的IO开销,并且可以避免对表进行排序和筛选操作,从而提高查询性能。

示例:

CREATE NONCLUSTERED INDEX IX_CoveringIndex ON Orders (CustomerID, OrderDate) INCLUDE (TotalAmount);

1.3 索引筛选器

索引筛选器是一种针对部分数据行创建索引的技术。通过使用索引筛选器,可以只为需要的行创建索引,从而减小索引大小,提高查询性能。

示例:

CREATE NONCLUSTERED INDEX IX_FilteredIndex ON Orders (OrderDate) WHERE Status = 'Shipped';

1.4 索引动态管理

SQL Server 提供了动态管理视图和动态管理函数,用于监视和管理索引的性能。通过这些功能,可以实时了解索引的使用情况,并进行必要的调整和优化。

示例:

SELECT * FROM sys.dm_db_index_usage_stats;

2.查询优化

除了索引优化外,优化查询本身也是提高数据库性能的关键。

2.1 查询提示

SQL Server 提供了多种查询提示(Query Hint),可以指导查询优化器执行特定的查询优化方案。例如,可以使用FORCESEEK提示强制查询优化器使用索引查找数据,或者使用MAXDOP提示限制查询的并行度。

示例:

SELECT * FROM Orders WITH (FORCESEEK) WHERE CustomerID = 123;

2.2 统计信息更新

SQL Server 使用统计信息来生成查询执行计划,因此保持统计信息的准确性非常重要。定期更新表的统计信息可以帮助查询优化器生成更准确的执行计划,从而提高查询性能。

示例:

UPDATE STATISTICS Orders;

2.3 查询重写

有时候可以通过重写查询语句来达到优化查询的目的。例如,使用EXISTS替代IN子查询、合并多个查询等。

示例:

SELECT * 
FROM Customers
WHERE EXISTS (SELECT 1 FROM Orders WHERE Orders.CustomerID = Customers.CustomerID);

3. 分区表

分区表是将一个大表分成多个小表的技术,可以提高查询性能和数据管理效率。在SQL Server中,可以使用以下方法创建分区表:

  • 范围分区:根据某个列的值将数据分成不同的范围。
  • 列表分区:根据某个列的值将数据分成不同的列表。
  • 哈希分区:根据某个列的值计算哈希值,将数据分成不同的哈希桶。

3.1 创建分区表示例

-- 创建一个范围分区表
CREATE TABLE dbo.Sales (OrderID INT,OrderDate DATE,Quantity INT,Price DECIMAL(10, 2)
) ON PARTITION BY RANGE (YEAR(OrderDate)) (PARTITION p0 VALUES LESS THAN (2000),PARTITION p1 VALUES LESS THAN (2010),PARTITION p2 VALUES LESS THAN (2020),PARTITION p3 VALUES LESS THAN (MAXVALUE)
);-- 创建一个列表分区表
CREATE TABLE dbo.Products (ProductID INT,CategoryID INT,Name NVARCHAR(50),Description NVARCHAR(255)
) ON PARTITION BY LIST (CategoryID) (PARTITION p0 VALUES (1, 2, 3),PARTITION p1 VALUES (4, 5, 6),PARTITION p2 VALUES (7, 8, 9)
);

4. 事务处理

事务处理是一种保证数据库一致性的技术。在SQL Server中,可以使用以下命令来控制事务:

  • BEGIN TRANSACTION:开始一个新的事务。
  • COMMIT:提交当前事务,使更改永久生效。
  • ROLLBACK:回滚当前事务,撤销对数据的更改。
  • SAVEPOINT:保存当前事务的状态,以便在发生错误时恢复。

4.1 事务处理示例

-- 开始一个新的事务
BEGIN TRANSACTION;-- 执行一些数据库操作
UPDATE dbo.Employees SET Salary = Salary * 1.1 WHERE DepartmentID = 1;
INSERT INTO dbo.Sales (OrderID, OrderDate, Quantity, Price) VALUES (1, '2022-01-01', 10, 100.00);-- 提交事务
COMMIT;-- 如果发生错误,回滚事务
-- ROLLBACK;

5. 触发器

触发器是在数据库中定义的一种特殊类型的存储过程,当特定事件(如插入、更新或删除)发生时自动执行。在SQL Server中,可以使用以下命令来创建和管理触发器:

  • CREATE TRIGGER:创建一个新的触发器。
  • ALTER TRIGGER:修改现有的触发器。
  • DROP TRIGGER:删除一个触发器。

5.1 创建触发器示例

-- 创建一个AFTER INSERT触发器,在向dbo.Employees表中插入新记录后自动发送电子邮件通知
CREATE TRIGGER trg_Employees_Insert
ON dbo.Employees
AFTER INSERT
AS
BEGINEXEC msdb.dbo.sp_send_dbmail@profile_name = 'YourEmailProfile',@recipients = 'youremail@example.com',@subject = 'New Employee Added',@body = 'A new employee has been added to the database.';
END;

6. 存储过程和函数

存储过程和函数是一组预编译的SQL语句,可以在数据库中多次调用。它们可以提高应用程序的性能和可重用性。在SQL Server中,可以使用以下命令来创建和管理存储过程和函数:

  • CREATE PROCEDURE:创建一个新的存储过程。
  • CREATE FUNCTION:创建一个新的函数。
  • ALTER PROCEDURE:修改现有的存储过程。
  • ALTER FUNCTION:修改现有的函数。
  • DROP PROCEDURE:删除一个存储过程。
  • DROP FUNCTION:删除一个函数。

6.1 创建存储过程示例

-- 创建一个存储过程,用于计算两个数的和
CREATE PROCEDURE sp_AddNumbers@num1 INT,@num2 INT,@result INT OUTPUT
AS
BEGINSET @result = @num1 + @num2;
END;

7. 视图

视图是一个虚拟表,它是基于一个或多个实际表的查询结果。视图可以简化复杂的查询,提高数据的安全性和可维护性。在SQL Server中,可以使用以下命令来创建和管理视图:

  • CREATE VIEW:创建一个新的视图。
  • ALTER VIEW:修改现有的视图。
  • DROP VIEW:删除一个视图。

7.1 创建视图示例

-- 创建一个视图,显示dbo.Employees表中的所有员工及其薪水信息
CREATE VIEW vw_EmployeeSalaries AS
SELECT Name, Salary FROM dbo.Employees;

8.性能监控和调优

8.1 执行计划分析

通过查看查询执行计划,可以深入了解查询是如何执行的,从而识别潜在的性能瓶颈,并采取相应的优化措施。

示例:

SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Orders WHERE CustomerID = 123;
GO
SET SHOWPLAN_ALL OFF;

8.2 事件监视

SQL Server 提供了丰富的性能监视功能,如跟踪、扩展事件等,可以用于实时监视数据库的性能指标,并及时发现和解决性能问题。

示例:

-- 创建扩展事件会话
CREATE EVENT SESSION PerfMonSession ON SERVER 
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS);-- 启动扩展事件会话
ALTER EVENT SESSION PerfMonSession ON SERVER STATE=START;

以上是 SQL Server 的一些进阶知识,通过合理使用索引优化、查询优化以及性能监控工具等,可以有效地提高数据库的性能和稳定性。

往期专栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术

相关文章:

SQL Server进阶知识

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…...

TFHEpp 使用记录

TFHEpp 使用记录 使用HE3DB错误randen 使用 需要使用 编译器gcc > 10 (unicode 编码) sudo apt-get install -y build-essential g-10 apt-utils ca-certificates git cmake libgmp-dev libfftw3-devgit clone https://github.com/virtualsecureplatform/TFHEpp cd TFHEp…...

大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明

大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。然而,现…...

vue:如何把后端传过来的数组的其中一个对象加入新的属性

加入我们是更改数组中的第一个对象&#xff0c;在vue中可以使用$set方法将属性插入到第一个对象中作为属性。 Script部分&#xff1a; <script>export default {data() {return {boxes: [//模拟后端传过来的数组{id:1,name:张三},{id:2,name:李四},{id:3,name:王五},{i…...

数据库数据恢复—MSSQL报错“附加数据库错误823”如何恢复数据?

数据库故障&分析&#xff1a; MSSQL Server数据库比较常见的报错是“附加数据库错误823”。如果数据库有备份&#xff0c;只需要还原备份即可&#xff1b;如果无备份或者备份不可用&#xff0c;则需要使用专业的数据恢复手段去恢复数据。 MSSQL Server数据库出现“823”的报…...

如何使用 Java 设计一个简单的成绩计算程序

简介 本文将介绍如何使用 Java 设计一个简单的成绩计算程序。该程序可以读取学生的成绩并计算出平均分、最高分和最低分等。通过这个例子&#xff0c;我们将展示如何使用面向对象的思想和一些常用的 Java 功能来解决实际问题。 需求分析 在开始编写程序之前&#xff0c;我们…...

requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案

问题背景 在Python 3.2中&#xff0c;尝试使用Request的OAuth支持时&#xff0c;遇到了OAuth导入失败的问题。以下代码&#xff1a;import requests from requests.auth import OAuth1url https://api.twitter.com/1/account/settings.jsonqueryoauth OAuth1(client_key, cli…...

山东省技能兴鲁网络安全大赛 web方向

文章目录 购买FLAG日志里的FLAG一只小蜜蜂 购买FLAG 随便登录admin进去&#xff0c;发现有充值和购买功能 但是试试充值发现不行 购买页面如下 bp抓包看看&#xff0c;发现value值可控 我们试试将其改为正数&#xff0c;发现成功 购买得到flag 日志里的FLAG <?phphi…...

No206.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

C#,数值计算——函数计算,Ratfn的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Ratfn { private double[] cofs { get; set; } private int nn { get; set; } private int dd { get; set; } public Ratfn(double[] num, double[] den) { …...

排序算法之-快速

算法原理 丛待排序的数列中选择一个基准值&#xff0c;通过遍历数列&#xff0c;将数列分成两个子数列&#xff1a;小于基准值数列、大于基准值数列&#xff0c;准确来说还有个子数列&#xff1a;等于基准值即&#xff1a; 算法图解 选出基准元素pivot&#xff08;可以选择…...

[vim]Python编写插件学习笔记2 - 分离

0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前&#xff0c;需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 1 Python 与 vimscript 分离 前文编写 vim 插件的方式&#xff0c;是将 Pyt…...

【已解决】ModuleNotFoundError: No module named ‘kornia‘

问题描述 Traceback (most recent call last): File "main.py", line 47, in <module> import data_augmentation File "/media/visionx/monica/project/stable_signature/hidden/data_augmentation.py", line 15, in <module> im…...

预览PDF并显示当前页数

这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面&#xff0c;引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…...

阿里云优惠券介绍、作用、领取入口及使用教程

阿里云是阿里巴巴集团倾力打造的云计算品牌&#xff0c;提供丰富多样的云计算产品及服务&#xff0c;为了吸引用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…...

Shell编程--流程控制

目录 1.条件结构1.1.文件测试(字符串)1.2.字符串比较1.3.数字条件比较1.4.文件条件判断 2.if多条件判断3.case语句 1.条件结构 测试&#xff1a;test 条件 条件为真返回 0&#xff0c;条件为假返回 1 语法&#xff1a;[ 条件 ] test 条件能够理解以下类型的表达式 1.1.…...

设计模式-模板方法模式(Template Method)

设计模式-模板方法模式&#xff08;Template Method&#xff09; 一、模板方法模式概述1.1 什么是模板方法模式1.2 简单实现模板方法模式1.3 使用模板方法模式的注意事项 二、模板方法模式的用途三、模板方法模式实现方式3.1 抽象类中定义模板方法&#xff0c;子类实现具体方法…...

远程登录Linux方法(Linux平台相互远程;Windows远程登录Linux、远程编码、文件传输;无法远程登录的问题解决;c程序的编译)

在实际使用Linux系统过程中我们不可避免的需要远程登录Linux&#xff0c;这是因为未来大家使用Linux服务器的时候你所对应的那台Linux服务器不一定提供界面(服务器可能在外地)。本篇将会介绍远程登录Linux的方法。 文章目录 1. SSH介绍2. Linux平台相互远程及文件传输2.1 Linux…...

macOS 13.6 及后续系统安装 Asahi Linux 将破坏引导

导读Asahi Linux 是一个致力于为 Apple Silicon 设备带来 Linux 支持的项目&#xff0c;日前有用户反馈称&#xff0c;若在相关设备上安装了 macOS 13.6-14&#xff0c;再安装 Asahi Linux &#xff0c;就会导致系统引导失败&#xff0c;出现“黑屏”情况。 目前 Asahi Linux 项…...

Python武器库开发-flask篇之flask框架的安装(二十一)

Flask介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架&#xff0c;对于Werkzeug本质是Socket服务端&#xff0c;其用于接收http请求并对请求进行预处理&#xff0c;然后触发Flask框架&#xff0c;开发人员基于Flask框架提供的功能对请求进…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...