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:如何把后端传过来的数组的其中一个对象加入新的属性
加入我们是更改数组中的第一个对象,在vue中可以使用$set方法将属性插入到第一个对象中作为属性。 Script部分: <script>export default {data() {return {boxes: [//模拟后端传过来的数组{id:1,name:张三},{id:2,name:李四},{id:3,name:王五},{i…...
数据库数据恢复—MSSQL报错“附加数据库错误823”如何恢复数据?
数据库故障&分析: MSSQL Server数据库比较常见的报错是“附加数据库错误823”。如果数据库有备份,只需要还原备份即可;如果无备份或者备份不可用,则需要使用专业的数据恢复手段去恢复数据。 MSSQL Server数据库出现“823”的报…...
如何使用 Java 设计一个简单的成绩计算程序
简介 本文将介绍如何使用 Java 设计一个简单的成绩计算程序。该程序可以读取学生的成绩并计算出平均分、最高分和最低分等。通过这个例子,我们将展示如何使用面向对象的思想和一些常用的 Java 功能来解决实际问题。 需求分析 在开始编写程序之前,我们…...
requests 在 Python 3.2 中使用 OAuth 导入失败的问题与解决方案
问题背景 在Python 3.2中,尝试使用Request的OAuth支持时,遇到了OAuth导入失败的问题。以下代码:import requests from requests.auth import OAuth1url https://api.twitter.com/1/account/settings.jsonqueryoauth OAuth1(client_key, cli…...
山东省技能兴鲁网络安全大赛 web方向
文章目录 购买FLAG日志里的FLAG一只小蜜蜂 购买FLAG 随便登录admin进去,发现有充值和购买功能 但是试试充值发现不行 购买页面如下 bp抓包看看,发现value值可控 我们试试将其改为正数,发现成功 购买得到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) { …...
排序算法之-快速
算法原理 丛待排序的数列中选择一个基准值,通过遍历数列,将数列分成两个子数列:小于基准值数列、大于基准值数列,准确来说还有个子数列:等于基准值即: 算法图解 选出基准元素pivot(可以选择…...
[vim]Python编写插件学习笔记2 - 分离
0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前,需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 1 Python 与 vimscript 分离 前文编写 vim 插件的方式,是将 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.在需要的页面,引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…...
阿里云优惠券介绍、作用、领取入口及使用教程
阿里云是阿里巴巴集团倾力打造的云计算品牌,提供丰富多样的云计算产品及服务,为了吸引用户,阿里云经常推出各种优惠活动,其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…...
Shell编程--流程控制
目录 1.条件结构1.1.文件测试(字符串)1.2.字符串比较1.3.数字条件比较1.4.文件条件判断 2.if多条件判断3.case语句 1.条件结构 测试:test 条件 条件为真返回 0,条件为假返回 1 语法:[ 条件 ] test 条件能够理解以下类型的表达式 1.1.…...
设计模式-模板方法模式(Template Method)
设计模式-模板方法模式(Template Method) 一、模板方法模式概述1.1 什么是模板方法模式1.2 简单实现模板方法模式1.3 使用模板方法模式的注意事项 二、模板方法模式的用途三、模板方法模式实现方式3.1 抽象类中定义模板方法,子类实现具体方法…...
远程登录Linux方法(Linux平台相互远程;Windows远程登录Linux、远程编码、文件传输;无法远程登录的问题解决;c程序的编译)
在实际使用Linux系统过程中我们不可避免的需要远程登录Linux,这是因为未来大家使用Linux服务器的时候你所对应的那台Linux服务器不一定提供界面(服务器可能在外地)。本篇将会介绍远程登录Linux的方法。 文章目录 1. SSH介绍2. Linux平台相互远程及文件传输2.1 Linux…...
macOS 13.6 及后续系统安装 Asahi Linux 将破坏引导
导读Asahi Linux 是一个致力于为 Apple Silicon 设备带来 Linux 支持的项目,日前有用户反馈称,若在相关设备上安装了 macOS 13.6-14,再安装 Asahi Linux ,就会导致系统引导失败,出现“黑屏”情况。 目前 Asahi Linux 项…...
Python武器库开发-flask篇之flask框架的安装(二十一)
Flask介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
一、研究背景与创新点 (一)现有方法的局限性 当前智驾系统面临两大核心挑战:一是长尾问题,即系统在遇到新场景时可能失效,例如突发交通状况或非常规道路环境;二是可解释性问题,传统方法无法解释智驾系统的决策过程,用户难以理解车辆行为的依据。传统语言模型(如 BERT…...
