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全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 连接不上 WRONGPASS invalid username-password pair

1.我的RedisDesktopManager 可以连接 但是 Springboot远程使用Redis就是连不上 2.我的密码是 abc123.. 多了英文的 ..符号 在Springboot过不了,所以Redis密码尽量字母数字,不要其他符号

炒现货黄金怎么做?挖掘黄金的投资机会

黄金一直以来都是备受投资者追捧的避险资产,其价值和潜力是无法忽视的。而炒现货黄金作为一种快速获取收益的投资方式,备受关注。那么,如何在炒现货黄金中找到投资机会呢?为您详细解析,简单易懂,帮助您开启…

Java-贪吃蛇游戏

前言 此实现较为简陋,如有错误请指正。 其次代码中的图片需要自行添加地址并修改。 主类 public class Main {public static void main(String[] args) {new myGame();} }游戏类 import javax.swing.*; import java.awt.event.KeyEvent; import java.awt.event.…

032-从零搭建微服务-定时服务(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

spacy 简介 spacy 是 Python 自然语言处理软件包,可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错, 或者安装完 spacy,无法正…

解决Chrome无法自动同步书签

前提:(要求能正常访问google) 准备一个谷歌账号 安装Chrome浏览器 开启集装箱插件(或者其他能访问谷歌的工具) 步骤:(使用集装箱插件/能正常访问谷歌的其他工具) 下载安装使用“集…

activiti7审批驳回,控制变量无法覆盖,导致无限循环驳回,流程无法结束

项目开发过程中使用工作流,因此考虑使用activiti7做完工作流引擎。项目开发过程中,发现流程驳回时,再次执行流程,控制变量无法覆盖,导致无限循环驳回,流程无法结束。流程图如下图所示: 驳回控制…

node 文件上传操作(前端 form表单上传 formData上传 后端 node 使用express+multer)

目录 前端form表单上传formData上传 后端 node 使用expressmulter 前端 form表单上传 <h1>个人信息</h1><form action"http://localhost:3000/api/sendFile" method"post" enctype"multipart/form-data"><label for"…

Android 如何根据区域高度动态计算最匹配的字体大小

Android 提供了一个 autoSizeTextType 属性来自动调整字体大小&#xff0c;但是它仅适用于 API Level 26 及以上的版本。对于 API Level 25 及以下的版本&#xff0c;可以通过代码计算最佳字体大小来实现动态调整。以下是使用 Kotlin 代码实现的示例&#xff1a; fun getBestFo…

Eclipse打包Springboot项目

首先&#xff0c;在pom.xml文件中添加配置&#xff0c;修改mainClass主函数&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configurat…

java:基于jjwt写一个jwt工具类

背景 在Java中&#xff0c;使用JWT&#xff08;JSON Web Tokens&#xff09;相关的包通常包括以下内容&#xff1a; jjwt&#xff1a;JJWT是一个非常流行的Java JWT库&#xff0c;它提供了简单易用的API来创建和验证JWT。jose4j&#xff1a;JOSE4J是一个用于处理JSON Web签名…

4+糖酵解+预后模型,结合预后模型为文章加分,思路值得模仿

今天给同学们分享一篇生信文章“A glycolysis-related two-gene risk model that can effectively predict the prognosis of patients with rectal cancer”&#xff0c;这篇文章发表在Hum Genomics期刊上&#xff0c;影响因子为4.5。 结果解读&#xff1a; COAD和READ之间的…

【力扣题:循环队列】

文章目录 一.题目描述二. 思路解析三. 代码实现 一.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好…

基于ssm流浪动物救助管理系统

基于ssm流浪动物救助管理系统 摘要 随着城市化的不断发展&#xff0c;流浪动物问题逐渐凸显&#xff0c;而对流浪动物的救助和管理成为社会关注的焦点。本文基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架&#xff0c;设计并实现了一套流浪动物救助管理系统。该系…

excel中用NORM.INV函数计算正态累积分布的逆

NORM.INV函数返回正态累积分布的逆。它的形式为NORM.INV(probability,mean,standard_dev)。 正态累积分布函数和正态概率密度函数互为逆。 参数说明&#xff1a; probability&#xff1a;对应正态分布的累积分布值。例如该值等于0.9&#xff0c;表示累积概率之和是0.9Mean&am…

MacOS Ventura 13 优化配置(ARM架构新手向导)

一、系统配置 1、About My MacBook Pro 2、在当前标签打开新窗口 桌面上创建目录的文件夹&#xff0c;每次新打开一个目录&#xff0c;就会创建一个窗口&#xff0c;这就造成窗口太多&#xff0c;不太好查看和管理&#xff0c;我们可以改成在新标签处打开新目录。需要在&…

【华为内部资料】《高速数字电路设计教材》(可下载)

与数字技术或软件相比&#xff0c;模拟技术人才的培养和造就仍然需要一定的实践和时间&#xff0c;但无论数字技术发展到任何阶段将永远离不开模拟技术。 由于难度系数较大的原因&#xff0c;有时即便投入很多精力&#xff0c;如果缺乏耐心、毅力和必要的条件&#xff0c;投入…

基础在线:如何搭建docker环境完整教程和镜像设置

Docker 安装 清理残余组件 执行后可能会报错&#xff08;软件包不存在等&#xff09;但不必理会。 for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done安装必备依赖 apt install apt-transport-https ca-c…

读取pdf、docx、doc、ppt、pptx并转为txt

文章目录 一、思路构建二、开始实现三、存在的问题3.1 解析doc文档遇到问题及解决方法&#xff1a;3.2 解析ppt文档遇到问题及解决方法&#xff1a; 四、读取pdf中的图片 一、思路构建 Zip文件和初始化文件放在同一个文件夹下&#xff1b;然后解析zip文件读取到一个新的文件夹…

csrf总结

csrf注入总结 漏洞描述 CSRF&#xff08;跨站请求伪造&#xff09;是一种网络安全漏洞&#xff0c;攻击者利用该漏洞在用户不知情的情况下以用户的身份发送恶意请求&#xff0c;从而导致用户执行未经授权的操作。 CSRF&#xff08;Cross Site Request Forgery, 跨站域请求伪…