大家好,我是全栈小5,欢迎来到《小5讲堂》。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • SQL 创建索引的基本语法和示例
    • 基本语法
    • 常见索引创建示例
      • 1. 创建简单非聚集索引
      • 2. 创建唯一索引
      • 3. 创建聚集索引
      • 4. 创建复合索引(多列索引)
      • 5. 包含额外列的索引(覆盖索引)
      • 6. 使用筛选条件创建筛选索引
      • 7. 在线创建索引(减少锁影响)
      • 8. 指定填充因子
    • 高级选项
      • 并行创建索引
      • 使用 tempdb 排序
      • 在特定文件组上创建索引
    • 注意事项
  • 实用查询小技巧
    • 技巧说明
    • 基本语法
    • 实际示例
    • 适用场景
    • 注意事项
    • 替代方案
  • 文章推荐

前言

由于博主用的云服务器配置比较低,2M带宽,所以整体访问速度会比较慢,单达到一定内存和并发上限后会出现查询超时的情况。
此时就在硬件不变动情况下,就需要从软件层面优化,sql表索引就是常见的查询优化方向之一,
如果你用的是SSMS可视化工具操作sql server数据库,那么通过可视化方式去创建索引可能会失败,可以换成通过sql方式创建!

在这里插入图片描述

SQL 创建索引的基本语法和示例

以下是 SQL Server 中创建索引的完整语法和常见示例:

基本语法

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX index_name
ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...)
[INCLUDE (column_name [, ...])]
[WITH (index_option [, ...])]
[ON filegroup_name | partition_scheme_name (column_name)]

常见索引创建示例

1. 创建简单非聚集索引

CREATE INDEX IX_Customer_LastName ON Customers(LastName);

2. 创建唯一索引

CREATE UNIQUE INDEX IX_Employee_Email ON Employees(Email);

3. 创建聚集索引

CREATE CLUSTERED INDEX IX_Orders_OrderDate ON Orders(OrderDate);

4. 创建复合索引(多列索引)

CREATE INDEX IX_Products_CategoryPrice ON Products(CategoryID, UnitPrice DESC);

5. 包含额外列的索引(覆盖索引)

CREATE INDEX IX_Orders_CustomerDate 
ON Orders(CustomerID, OrderDate) 
INCLUDE (TotalAmount, Status);

6. 使用筛选条件创建筛选索引

CREATE INDEX IX_ActiveProducts ON Products(ProductName)
WHERE Discontinued = 0;

7. 在线创建索引(减少锁影响)

CREATE INDEX IX_Customer_Region ON Customers(Region) WITH (ONLINE = ON);

8. 指定填充因子

CREATE INDEX IX_OrderDetails_ProductID 
ON OrderDetails(ProductID) 
WITH (FILLFACTOR = 70);

高级选项

并行创建索引

CREATE INDEX IX_LargeTable_Column ON LargeTable(Column1) WITH (MAXDOP = 4);

使用 tempdb 排序

CREATE INDEX IX_LargeTable_Column ON LargeTable(Column1) WITH (SORT_IN_TEMPDB = ON);

在特定文件组上创建索引

CREATE INDEX IX_LargeTable_Column ON LargeTable(Column1) ON INDEX_FG;

注意事项

  1. 表名和列名区分大小写取决于数据库的排序规则设置
  2. 每个表只能有一个聚集索引
  3. 创建索引会占用系统资源,大型表上创建索引可能需要较长时间
  4. 索引会提高查询性能但会降低插入、更新和删除操作的性能
  5. 定期维护索引(重建或重组)以保持性能

实用查询小技巧

使用 WITH (NOLOCK) 减少阻塞

技巧说明

在SQL Server中,当需要快速查询数据而不需要绝对最新的数据或精确一致性时,可以使用WITH (NOLOCK)提示(也称为"脏读")。这可以避免查询被其他事务阻塞,提高查询速度,特别是在高并发环境下。

基本语法

SELECT 列名1, 列名2, ...
FROM 表名 WITH (NOLOCK)
WHERE 条件;

实际示例

-- 普通查询(可能被其他事务阻塞)
SELECT OrderID, CustomerID, OrderDate 
FROM Orders
WHERE OrderDate > '2023-01-01';-- 使用NOLOCK的查询(不会被阻塞,但可能读到未提交的数据)
SELECT OrderID, CustomerID, OrderDate 
FROM Orders WITH (NOLOCK)
WHERE OrderDate > '2023-01-01';

适用场景

  1. 报表查询,对实时性要求不高
  2. 大数据量分析查询
  3. 开发调试环境
  4. 系统监控查询

注意事项

  1. 可能读取到未提交的数据(脏读) - 如果其他事务回滚,你读到的数据可能不存在
  2. 不保证数据一致性 - 可能读到部分更新的数据
  3. 不适合财务等关键业务 - 对于需要精确数据的场景不应使用
  4. 不是表锁的替代品 - 不能解决所有并发问题

替代方案

如果担心脏读但需要减少阻塞,可以考虑:

-- 使用READ UNCOMMITTED隔离级别(会话级设置)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT OrderID, CustomerID, OrderDate 
FROM Orders
WHERE OrderDate > '2023-01-01';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 恢复默认

文章推荐

【数据库】使用Sql Server创建索引优化查询速度,一般2万多数据后,通过非索引时间字段排序查询出现超时情况

【数据库】SQL Server 查询条件小技巧:ISNULL 函数的使用,有请DeepSeek来辅助讲解下

【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

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

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

相关文章

MyBatis联合查询

文章目录数据库设计MyBatis 配置MyBatis 映射文件Mapper 接口总结数据库设计 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…

项目中使用的设计模式

项目中使用的设计模式请列举几个项目中常用的设计模式什么是设计模式,在项目中使用了那些设计模式动态代理模式JDK动态代理CGLIB动态代理单例模式懒汉式(非线程安全)饿汉式懒汉式(线程安全)工厂模式观察者模式装饰器模…

实战教程:从“对象文件为空“到仓库重生——修复 Git 仓库损坏全记录

文章目录实战教程:从"对象文件为空"到仓库重生——修复 Git 仓库损坏全记录案发现场:一个严重损坏的仓库修复之旅:四步让仓库重获新生准备工作:创建安全备份第 1 步:清理战场——删除所有空对象第 2 步&…

ansible 操作家族(ansible_os_family)信息

1. 操作系统系列 (ansible_os_family)ansible web -m setup -a filteransible_os_family2. 操作系统家族为 RedHat 时执行任务--- - hosts: websrvsremote_user: roottasks:- name: Install package on RedHat systemsyum:name: httpdstate: presentwhen…

一文学会c++继承 组合

文章目录继承简介定义访问限定符和继承方式⭐基类派生类赋值转换继承的作用域派生类的默认成员函数继承与友元继承与静态成员⭐复杂的菱形继承虚拟继承组合继承简介 继承是面向对象程序设计代码复用的重要手段,使得程序员可以在保持原类的基础上扩展,新…

.Net下载共享文件夹中的文件

由于IIS站点权限等问题,总是没找到处理办法,所以改用外挂的winform的方式来下载共享文件(也可以改为使用windows服务的方式)。 前提需要先在资源管理器中登录到共享文件夹,确保系统能访问。 服务端代码 (.NET后端) usi…

目标检测数据集 - 眼睛瞳孔检测数据集下载「包含COCO、YOLO两种格式」

数据集介绍:眼睛瞳孔检测数据集,真实采集高质量人脸眼部图片数据,适用于人脸定位、人脸疾病如白内障等疾病的视觉检测。数据标注标签包括 eyepupil 瞳孔一 个缺陷类别;适用实际项目应用:眼睛瞳孔检测项目,以…

Keil MDK-ARM V5.42a 完整安装教程

文章目录一、安装前期准备二、Keil MDK-ARM 主程序安装三、器件支持包(Pack)安装四、许可证激活五、安装验证Keil MDK(Microcontroller Development Kit)是针对 Arm Cortex-M 系列微控制器的专业开发环境,集成了 μVis…

WPF中引用其他元素各种方法

在WPF中,引用其他元素的方式有多种,每种方式适用于不同场景,各有优缺点。除了x:Reference,常用的还有以下几种: 一、ElementName 绑定(最常用的XAML绑定方式) 通过元素的x:Name属性引用同一作用…

Python生成统计学公式

一元线性回归模型 2.1回归分析概述/25 一、回归分析基本概念/25 二、总体回归函数/27 三、随机误差项/29 四、样本回归函数/30 2.2 一元线性回归模型的参数估计/32 一、参数估计的普通最小二乘法/32 二、拟合优度/35 2.3基本假设与普通最小二乘估计量的统计性质/36 一、一元线性…

网络工程师--华为命令专题

一、交换机 交换机分类:1.根据交换方式划分:(1)存储转发式交换(Store and Forward)(2)直通式交换(Cut-through)(3)碎片过滤式交换&…

判断可编辑div的光标是否在最前面

要判断一个可编辑div(contenteditable)中的光标是否位于最前面,可以使用以下几种方法: 方法一:使用Selection和Range API function isCaretAtStart(div) {const selection window.getSelection();if (selection.rangeCount 0) return false…

【unity实战】使用Unity程序化生成3D随机地牢(附项目源码)

最终效果 文章目录最终效果前言1、理解程序生成的核心概念2、种子值的核心作用3、程序生成的实际应用4、主流程序生成技术概览5、选择合适的技术实战1、素材2、生成一面墙变换矩阵数据3、渲染墙壁4、加点随机不同的墙壁效果5、绘制四面墙壁4、在四个角落生成支柱5、生成地板6、…

多账号管理方案:解析一款免Root的App分身工具

之前有小伙伴问阿灿有没有可以软件分身的免费软件,后来阿灿找到了一款可以无限分身的app感觉很实用,只有10M大小 02软件介绍说白了它能给各种app和游戏做分身,包括V信、qQ、某音、某付宝这些,而且支持最新的安卓15系统。每个分身…

(附源码)基于PHP和Vue的网上购物平台

内容摘要 内容摘要: 随着互联网技术的迅猛发展,网上购物已成为人们日常生活的重要组成部分。本文围绕PHPVue技术栈构建的网上购物平台展开研究,深入探讨了该平台的架构设计与实现细节。平台前端采用Vue框架,利用其组件化开发和数据驱动的特性…

51单片机

中断系统1.什么是中断当CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断2.为什么要…

前端开发:HTML(5)—— 表单

下面我们来学习表单。 目录 什么是Web表单? 表单标签 1.form标签 2.输入框 文本框和密码框 单选框和复选框 1.单选框 2.复选框 3.按钮 (1)普通按钮 (2)提交按钮 (3)重置按钮 &#…

【YOLOv8改进 - C2f融合】C2f融合SFS-Conv(空间 - 频率选择卷积)提升特征多样性,同时减少参数和计算量

YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏 介绍 摘要 文…

如何将照片从POCO手机传输到Mac电脑

将照片从POCO手机传输到Mac电脑可能会有些困难,因为与iPhone不同,POCO设备没有原生的macOS支持。这常常让用户寻找简单、有效的方法来移动图片,同时避免丢失质量,节省时间,并避免复杂的软件设置。如果你想知道如何将照…

最新教程 | CentOS 7 内网环境 Nginx + ECharts 页面离线部署手册(RPM 安装方式)

📁 一、准备阶段(在联网电脑上完成) 1.1 下载 Nginx 官方 RPM 安装包 在联网电脑浏览器中访问 Nginx 官方稳定版本仓库: 🔗 地址:http://nginx.org/packages/centos/7/x86_64/ ☁️云盘:htt…