优化SQL查询实现高效数据检索(二)

大家好,本文将接着上文,继续介绍SQL查询优化的重要性以及如何优化SQL查询以实现更快的数据检索。

  • 适当使用通配符

适当使用通配符对于优化SQL查询尤为重要,特别是在匹配字符串和模式方面。通配符是用于SQL查询中查找特定模式的特殊字符,SQL中最常见的通配符是“%”和“_”,其中“%”表示任何字符序列,“_”表示单个字符。明智地使用通配符很重要,因为不当使用可能会导致性能问题,特别是在大型数据库中。然而,有效地使用它们可以极大地提高字符串匹配和模式匹配查询的性能。

现在让我们看一个实例,此查询使用RIGHT()函数来提取customer_name列的最后三个字符,然后检查它是否等于“son”。

SELECT customer_name
FROM customer
WHERE RIGHT(customer_name, 3) = 'son';

 以下是输出结果:

 

尽管此查询实现了所需的结果,但它并不那么高效,因为必须将RIGHT()函数应用于表中的每一行。让我们通过使用通配符来优化我们的代码:

SELECT customer_name
FROM customer
WHERE customer_name LIKE '%son';

以下是输出结果:

 

这个优化后的SQL查询使用LIKE运算符和通配符“%”来搜索customer_name列以“son”结尾的记录。这种方法更有效,因为它利用了数据库引擎的模式匹配能力,并且如果有索引可用,它可以更好地利用索引。

正如我们所看到的,总查询时间从436毫秒降低到62毫秒,快了近7倍。

  • 使用Top或LIMIT来限制样本结果的数量

使用TOP或LIMIT来限制样本结果对于优化SQL查询尤为重要,特别是在处理大型表时,这些子句允许你仅从表中检索指定数量的记录,而不是所有记录,这对性能是有益的。

现在从customer表中检索所有信息:

SELECT *
FROM customer

以下是输出结果:
 

 

当处理较大的表时,此操作可能会增加I/O和网络延迟,这可能会降低SQL查询性能。现在通过将输出限制为10来优化我们的代码:

SELECT *
FROM customer
LIMIT 10;

 以下是输出结果:

 

通过限制输出,将减少网络延迟和内存使用,并提高响应时间,尤其是在处理大型表时。在我们的实例中,经过SQL查询优化后,总查询运行时间从260毫秒降低到89毫秒,查询速度变得几乎快了3倍。

  • 使用索引

这次将识别并为使用WHEREJOINORDER BY子句中的列创建适当的索引,以提高查询性能。通过对经常访问的列进行索引,数据库可以更快地检索数据。首先运行以下查询:

SELECT customer_id, customer_name
FROM customer
WHERE segment = 'Corporate';

 以下是输出结果:

 

查询运行时间为259毫秒,试着通过创建索引来改善这一情况:

CREATE INDEX idx_segment ON customer (segment);
SELECT customer_id, customer_name
FROM customer WITH (INDEX(idx_segment))
WHERE segment = 'Corporate';

以下是输出结果:

 通过在INDEX()中使用idx_segment,数据库引擎能够根据segment列高效地搜索customer表,从而使查询运行更快,将总查询时间从259毫秒降低到75毫秒。

使用SQL查询优化工具

由于长代码和高度复杂的查询的复杂性,你可能需要考虑使用查询优化工具。

这些工具可以分析你的查询执行计划,识别缺失的索引,并建议替代查询结构以帮助优化你的查询。一些流行的查询优化工具包括:

1.SolarWinds Database Performance Analyzer:该工具可帮助你监视和改善数据库性能。它显示查询问题以及它们的运行方式。它适用于多种数据库系统,如SQL Server、Oracle和MySQL。

2.SQL Query Tuner for SQL Diagnostic Manager:该工具具有使查询工作得更好的高级功能,如性能提示、索引检查和显示查询运行方式。它通过查找和修复问题来帮助你使SQL查询变得更好。

3.SQL Server Management Studio (SSMS):SSMS具有可检查性能并改善查询的内置工具,如活动监视器、执行计划分析和索引调整向导。

使用SQL查询优化工具和资源对于改进查询至关重要,通过这些工具可以了解查询的工作方式,找到问题并使用最佳实践来更快地获取数据并改善应用程序。

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

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

相关文章

K8s(kubernetes)集群搭建及dashboard安装、基础应用部署

基础介绍 概念 本质是一组服务器集群,在集群每个节点上运行特定的程序,来对节点中的容器进行管理。实现资源管理的自动化。 功能 自我修复弹性伸缩服务发现负载均衡版本回退存储编排 组件 控制节点(master)-控制平面 APIserver:资源操作…

Linux ❀ Openssh 8.9p1源码升级教程

文章目录 升级操作注意事项:1. 安装依赖2. 执行升级2.1 上传压缩包并保存配置2.2 开始升级 升级操作注意事项: 编译过程需要依赖,必须安装完成!!!SSH服务升级过程可能会导致无法远程连接服务器!!!若必须远程登录必须确认telnet服务可用!!!升…

第四十六章Java包(package)

在编写 Java 程序时,随着程序架构越来越大,类的个数也越来越多,这时就会发现管理程序中维护类名称也是一件很麻烦的事,尤其是一些同名问题的发生。有时,开发人员还可能需要将处理同一方面的问题的类放在同一个目录下&a…

Android - AIDL

一、概念 二、使用 2.1 Server 端 2.1.1 创建 .aidl 文件 Module右键→New→AIDL→AIDL File(如果不可选,在build.gradle的buildFeatures节点添加aidl true)。 在创建的接口中定义抽象方法。 interface IDemoAidlInterface {//自己的业…

【STM32MP135】修复EMMC模式启动时,uboot启动识别为usb0设备问题

文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/arch/arm/dts/stm32mp135d-atk.dts 文件路径:u-boot-stm32mp-v2021.10-stm32mp1-r1/configs/stm32mp13_defconfig

基于霍夫变换的航迹起始算法研究(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 一、设计内容 利用Hough变换处理量测得到的含杂波的二维坐标,解决多目标航迹起始问题。使用Matlab进行仿真&#x…

TeeChart for.NET Crack

TeeChart for.NET Crack TeeChart for.NET为各种图表需求提供了图表控件,包括金融、科学和统计等重要的垂直领域。它可以处理您的数据,在各种平台上无缝创建信息丰富、引人入胜的图表,包括Windows窗体、WPF、带有HTML5/Javascript渲染的ASP.N…

k8s+springboot+CronJob 定时任务部署

kubernetesspringbootCronJob 定时任务配置如下代码: cronjob.yaml k8s 文件 apiVersion: batch/v1 kind: CronJob metadata:name: k8s-springboot-demonamespace: rz-dt spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 …

2023.7月最新版idea安装Jrebel实现热部署,可解决后端启动等待时间过长问题

2023.7最新版idea热部署配置 一 下载jrebel插件二 激活我使用的方法 三 配置方式1 设置自动编译2 设置 compiler.automake.allow.when.app.running3 勾选项目,然后以Rebel方式启动 4 Settings查看Activation情况四 报错解决1 启动失败 2 端口被占用 五 总结 一 下载…

vue3+vite+Ts 基于Antv/x6 绘制流程图

需求效果: 需求: 实现一个流程图,双击可对相应的组件进行一些功能操作; 工具栈: 这里使用antv/x6, 基于vue3vitets进行开发 官网地址: https://x6.antv.antgroup.com/examples/showcase/pra…

代码随想录算法训练营第六十二天—图论补充

理论基础&#xff1a; 第一题、所有可能的路径 力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void dfs(vector<vector<int>>& graph, int x){if(x graph.size() - 1){result.push_back(path);retu…

科技资讯|苹果Vision Pro手部追踪和手势相关新专利曝光

近日&#xff0c;美国专利商标局正式授予苹果一项与 Apple Vision Pro 主要功能相关的专利&#xff1a;手部追踪和手指手势。 苹果专利指出&#xff0c;沉浸感的质量取决于几个重要因素。例如&#xff0c;显示器的特性&#xff0c;如图像质量、帧率、像素分辨率、高动态范围 …