返回顶部
首页 > 资讯 > 数据库 >如何让SQL再快一点儿
  • 638
分享到

如何让SQL再快一点儿

2024-04-02 19:04:59 638人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关如何让sql再快一点儿,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL即结构化查询语言(Structured Query Language

这篇文章将为大家详细讲解有关如何让sql再快一点儿,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。


SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库系统。

从接触编程到现在一直从事和数据库相关的工作,SQL是我使用时间最长的程序语言,没有之一。

关于SQL优化的文章网上很多,很具体,写的很不错,这里不再赘述。这篇文章将会结合平时工作中遇到的问题和经验心得来阐述如何做好SQL优化,其中有错误和不足的地方,还请大家纠正补充。

对于数据库优化有两个层面,一是SQL优化,属于业务层优化;一是数据库设计、表空间规划、缓存等属于管理层面的优化,我们这里只讨论SQL优化这个层面。

接受挑战

不要被运行效率低下或者复杂的SQL吓倒,要勇于接收它的挑战,问题很明确就是要把这个SQL优化快一点,解决方法肯定比遇到的问题多。

越是运行慢,越是复杂的SQL优化的空间就越大。

分析场景

数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 

OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作,对于SQL的执行效率有很高的要求;

OLAP 系统则强调数据分析,强调SQL执行时机,强调磁盘I/O,强调分区等。

OLTP要求事务一致性和快速执行,SQL执行时间一般以毫秒或者秒为单位;OLAP对事务一致性要求不高,SQL执行时间以分钟或者小时为单位。因此,不同的业务场景,SQL优化的方法也是不同的。

定位SQL优化点

由于数据库产品、参数配置甚至同一款产品的不同发行版本都会导致同一条SQL出现不同的运行效率。随着业务数据的增长,原本运行良好的SQL也会出现瓶颈。

变化再多也有规律可循,SQL运行效率低根本的问题就是SQL表关联太多、SQL逻辑太复杂、表数据量太大、未使用索引等,这些就是我们要优化的点。

拿到运行效率低的SQL以后,要分析一下该条SQL用到哪些表?哪些索引?表中的数据量是多少?对整个SQL运行的基础环境有一个清晰的认识。

优化SQL最常用的辅助工具就是数据库本身提供的“执行计划”,如何开启、使用执行计划分析和优化SQL,可点击文章最后左下角「阅读原文」查看之前整理的一篇关于《数据库SQL执行计划应用初探》的文章。

进行SQL优化

定位到SQL执行效率低下的原因以后,要想办法优化它,下面是一些通用的处理思路,可以参考一二。

索引;索引是关系型数据库中SQL优化的利器,设计良好的索引以及在SQL中正确应用索引基本上能解决大部分的SQL优化问题。可以通过执行计划分析SQL中索引的应用情况。

变通;3+6与4+5的结果都是9,做事的方式并不是唯一的,可能一种SQL写法效率很低,然而你换一个思路试试其他的写法,效率会有很大的提升,这个需要不断的尝试和摸索。

举个栗子,以oracle为例查询公司男性与女性员工的薪资总和

select  

(select sum(salary) from employee where sex='男')  男性薪资总和,

(select sum(salary) from employee where sex='女')  女性薪资总和

from dual

更好的写法应该是

select

sum(case when sex='男' then salary else 0 end) 男性薪资总和,

sum(case when sex='女' then salary else 0 end) 女性薪资总和

from employee

我刚入门SQL时,就是采用了第一种写法,逻辑最简单明了,但是一个employee表却被扫描了两次(在没有索引的情况下),随着数据量的增加,这条SQL必然出现效率低的问题,第二种写法就会优化很多,效率更高。这是一个简单不能再简单的变通了(当然是现在看来,当时可能想不到)。

分解;把复杂的一条SQL可以拆解为多条简单SQL分步骤执行,可能你会觉得分步骤执行做了很多额外的工作,但是每条简单的SQL执行的会非常快,整体上提升了SQL执行效率。

SQL分解最常用的就是创建中间表,中间表只保存需要的字段和数据行,同时增加必要的索引,可大大提升SQL的执行效率。

环境;SQL优化要在同一个环境中进行,不同的环境中SQL执行路径可能是不同的,优化的方法也是不同的。尽量排除环境因素对SQL优化的影响。

经验;经验很重要,但是避免陷入经验主义。你可能在Oracle中有着非常丰富的SQL优化经验,但是在DB2数据库中可能就不灵了,不要纠结,这很正常。在我从Oracle数据库转向DB2数据库时就出现了很多问题,在Oracle中积累的经验转移到DB2中行不通,只能另辟蹊径。

SQL优化需要经验,但是不能太依赖经验,要不断调整自己的思路。每款数据库产品都有自己的特点,要了解它们,然后去不断应用。好在大部分的经验是通用的,只是略加调整即可,不要太大压力。

把平时优化SQL的技巧和方法总结下来,在真实的SQL优化场景中反复使用和调整,逐渐形成自己的一套优化经验。

关于“如何让SQL再快一点儿”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 如何让SQL再快一点儿

本文链接: https://lsjlt.com/news/71889.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何让SQL再快一点儿
    这篇文章将为大家详细讲解有关如何让SQL再快一点儿,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL即结构化查询语言(Structured Query Language...
    99+
    2024-04-02
  • 如何让SpringBoot启动更快一点
    这篇文章主要介绍“如何让SpringBoot启动更快一点”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何让SpringBoot启动更快一点”文章能帮助大家解决问题...
    99+
    2024-04-02
  • 如何让SQL运行得更快
    这篇文章主要讲解了“如何让SQL运行得更快”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何让SQL运行得更快”吧!  人们在使用SQL时往往会陷...
    99+
    2024-04-02
  • 怎么让Python程序快一点运行
    本篇内容介绍了“怎么让Python程序快一点运行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python性能调试要进行Python性能,前...
    99+
    2023-06-16
  • html如何让字体变色一点
    使用 css 或行内样式更改 html 中的文本颜色,步骤包括:创建并链接 css 文件(使用 "color" 属性定义颜色);在 html 元素中直接添加行内样式 ("style" 属...
    99+
    2024-04-11
    css
  • 如何让Python像Julia一样快地运行
    如何让Python像Julia一样快地运行,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Julia 与 Python 的比较我是否应丢弃 Python 和其他语...
    99+
    2023-06-17
  • 如何让windows系统变快
    如何让windows系统变快,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。随着操作系统安装的时间越来越长,应用软件安装的越来越多,以及一些不正当的设置,将导致W...
    99+
    2023-06-14
  • 如何选择数据库服务器,参考这几点让你不再被坑
    随着互联网业务的越来越成熟,各种中小型企业投入的运营成本也越来越高,运营时间随着日积月累的增加,那些以数据库为主要支撑的系统应用,在发展成一定规模之后,对服务器硬件的设备要求就更加苛刻了,一旦服务器设备没办法承受数据库的压力,造成超负荷运行...
    99+
    2014-12-09
    如何选择数据库服务器,参考这几点让你不再被坑
  • PyPy 如何让Python代码运行得和C一样快
    目录1. 引言2. 举个栗子3. 刨根问底3.1 提前编译3.2 语言可解释性3.3 即时编译4. 总结1. 引言 作为一名算法工程师,如何快速实现一个想法并验证它是否有效对日常工作...
    99+
    2024-04-02
  • 如何让网站速度更快
    本篇内容介绍了“如何让网站速度更快”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Apache 2.0在性能上的改善最吸引人。在支持POSIX...
    99+
    2023-06-10
  • iPhone电池健康下降快怎么办?了解这四点,让你的电池再用三年
    身为一名iPhone用户最担心的就是手机的续航以及信号问题,这两个问题一直困扰着iPhone用户多年,那么小编今天就来与大家好好聊聊iPhone电池健康的问题。 ...
    99+
    2024-04-02
  • 如何快速上手SQL
    这篇文章主要为大家展示了“如何快速上手SQL”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何快速上手SQL”这篇文章吧。两张示例表为了方便练习SQL语法,特地...
    99+
    2024-04-02
  • 云服务器路由器为什么快一点呢怎么回事儿
    云服务器路由器的速度取决于许多因素,例如服务器的配置、带宽、硬件和软件设置等,因此您需要仔细了解这些因素并采取相应的措施,以便最大化云服务器路由器的性能。 一般情况下,云服务器路由器的速度通常会受到以下几个因素的影响: 带宽:路由器的带...
    99+
    2023-10-27
    路由器 回事儿 服务器
  • 云服务器如何加速网速快一点
    云服务器是一种虚拟服务器,它提供了快速的数据访问和存储服务,可以在同一时间内同时处理大量的数据。以下是一些加速云服务器的方法: 更改数据加载方式:使用多台云服务器共同访问同一个数据集,可以减少等待时间。您可以更改数据加载方式,例如使用集...
    99+
    2023-10-26
    网速 服务器
  • 如何让Mac快速锁屏?让Mac快速锁屏的几种方法
    想知道让如何能够让Mac快速锁屏吗?本次小编为您带来了让Mac快速锁屏的三种方法,能够快速让您锁屏!想知道的小伙伴快来看看吧!让Mac快速锁屏的几种方法方法一打开钥匙串访问;进入偏好设置 - 通用,勾选在菜单栏中显示钥匙串状态;这样就能在菜...
    99+
    2023-06-05
  • 如何让服务器运行更快
    让服务器运行更快的方法:1、将服务器的硬件配置进行升级;2、将服务器上不必要的端口以及服务器进行关闭;3、对服务器应用程序的源代码编译进行简化;4、优化Web服务器和数据库服务器,从而加快服务器的运行速度。具体内容如下:硬件升级这可能是提升...
    99+
    2024-04-02
  • 如何让PHP引擎快速运转
    这篇文章主要为大家展示了“如何让PHP引擎快速运转”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何让PHP引擎快速运转”这篇文章吧。一、代码优化一谈到代码优化,或许你想到的就是整齐明了的代码,...
    99+
    2023-06-17
  • 如何快速掌握Fink SQL
    这篇文章主要讲解了“如何快速掌握Fink SQL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何快速掌握Fink SQL”吧!1、导入所需要的的依赖包&l...
    99+
    2024-04-02
  • SQL如何快速实现UCF
    这篇文章主要介绍了SQL如何快速实现UCF,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQLselect uid1,u...
    99+
    2024-04-02
  • 如何让XP系统不再出现内存读写错误
    当我们在计算机系统中运行一些容量较大的程序或者游戏时,系统常常会自动弹出“xx内存不能为read或written”的错误提示,遇到这种故障信息时,我们该如何才能将它有效排除,同时确保下次运行容量较...
    99+
    2023-06-01
    XP系统 内存 系统 XP
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作