SQL 优化换汤不换药的时代变了与SQL审核

news2024/12/23 23:18:05

1db314429d8e9c87ff748211cee504fa.png

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到3群(共1000人左右 1 + 2 + 3) 

注明:最近加的人有点多,如果您如果要加入2群,请说明自己的职业和为什么加入,不提直接进三群。

最近在某个群关于MYSQL 的一个优化的问题,让我必须写这篇文字,主要事情是一个同学提出MYSQL 相关的语句性能的问题,但是这个语句一看就不大像是搞基于MYSQL 开发有经验的人员撰写的,更像是ORACLE移植过来的语句,这边解释了一下关于MYSQL 语句优化的几种方法,基于MYSQL的数据库产品,不能将所有的语句优化都堆积到 MYSQL 数据库本身,而应是有步骤的,将一部分优化的方式迁移到程度端来操作,并提出优化后会产生多次访问数据库的情况。

这里有一位同学提出异议,认为多次访问数据库,与一次性访问数据库本身相比,一次性访问数据库获得结果是快速的高效的,所以主要的方式还是应该在SQL本身的优化上。关于这个问题我提出了异议

1  时代不同了,ORACLE 的优化思路在某些数据库上是无法继续的,单纯只从SQL的角度出发,无异于杀鸡取卵,不停的压榨数据库本身的能力,不如将这部分压力分散到,该承接的部分。

2  MYSQL的优化器无法和 ORACLE 相提并论,并且提出一次性访问,比多次访问寄存结果的方式要好的理论,在当前已经可以逐步的抛弃了,提出这个理论与强调存储过程是一个思路,在MYSQL中是没有大量使用存储过程的先例,或成功的案例,继续守着ORACLE 的思路来优化MYSQL 如同痴人说梦。

3  一次性访问不一定比多次访问获得结果要好,这样看非常的片面,如在高并发的场景下,每次访问的时间最小化是重点,一次性访问必然会牵扯更多的表,在一个时间分片被锁定资源,高并发中 DML DQL 等混杂,表中的资源最小时间粒度,最低复杂粒度的被占用,这才是MYSQL的数据库的特点,而不是写一坨SQL 然后不断的调优,你一个SQL 是可以,但量表导致质变,治标不治本的方案,还要继续到什么时候。

从更深的角度切入另一个DBA 工作范围的问题

说到SQL 优化和SQL 审核这应该是DBA的天职,或者说你这个职业就是干这个的这应该没有人反对,甚至曾经一度出现过一个DBA的分支,SQL 优化工程师。 但是好日子慢慢的不在了,现在SQL优化工程师这个职位已经很长时间看不到了,同时SQL 优化的文字见的也越来越少,WHY,一度热门的部分怎么就声音减弱了????

下面总结一下相关的原因

1  基于早年的数据库时代无论是 ORACLE , SQL SERVER 等数据库基于开发软件的思路和当时开发软件的能力,都是在基于数据库为中心的开发模式,存储过程,SQL ,函数,大事务,等非常多见,这就导致SQL 优化是一个非常重要的部分,优化好SQL自然数据库就可以在不添加硬件扩展的基础上可以继续的良好的工作,这是一个降本增效的工作,也是一个涉及数据库安全的工作,维稳的工作,这就是当年数据库的工作重点。

但是往日不如今日,整体的数据库软件,开发体系,全都在变革,目前整体的开发的思路已经转移到以微服务为主的开发模式中,也就是集中化的开发思想过时了,每个微服务知识一个模块,从根本上就把大事务和存储过程这个部分消灭了,导致SQL 变得简单,所以优化的部分变得少了。

同时开发中开发自己不写SQL的情况越来越多,通过开发IDE自己撰写SQL,转化SQL的方式越来越多,本身这些开发软件就有SQL的一些优化的特性。除此以外,基于这样的开发方法,SQL基本在这个情况下,无法进行改变,那么继续强调SQL 优化,如同 去了贫困山区,人家饭都吃不饱,你问人家,你怎么不吃肉 ,---- 可笑的是谁???

2  基于硬件的变化,早年间基于数据库的硬件非常昂贵,所以添加硬件本来就是一个费力不讨好的事情,花钱,然后被领导指着SQL优化不好,导致必须硬件抗,所以SQL 优化的好,在数据库方面就可以减少硬件的升级,但目前数据库的硬件本身就可以很好的扩充,整体的硬件体系的变化导致一般的硬件就可以满足目前一些垃圾SQL 的运行,让SQL优化的时间的越来越靠后。

3  基于数据库体系的变化,数据库体系在不断的变化,SQL的优化在有些数据库上,已经变得不那么重要了,分布式数据库本身要求SQL就是短小精悍,同时一些云原生的数据库出现,让快速添加节点,读写分离,自动优化等变得稀松平常,SQL优化的80-90%的工作已经不存在了,剩下那些极端的情况也在上面开发体系的变化中被消磨了,尤其新的项目中,通过数据库自身的一些特性来解决SQL 优化的问题,成为一个新的知识点,数据库的架构如何搭配,分散,解耦,项目中用 3种以上的数据库类型很正常,这也导致复杂的SQL 不存在了,所以新的项目中提到SQL 优化的事情越来越少,并且目前大部分数据库都有并行的模式,这也导致在硬件变强后,SQL 优化的问题又滞后了,让普通业外人士越来越忽视这个问题。

4  数据处理方式的变化,这点也是让一些SQL优化被消磨殆尽的一个原因,原有在数据库处理的OLAP的工作,已经被大数据,新型的数据库产品,处理,数据库本身承担的责任变小了,所以导致SQL持续的简单化,容器化,这也让SQL的优化的工作变少了。尤其MYSQL数据库大大量应用,让数据库容器化的思维模式更加的盛行,周边解决数据库的OLAP的方案甚多,如CLICKHOUSE, HTAP 的方案,如POALRDB FOR MYSQL + IMCI 的方式,让曾经费劲的SQL 优化,在你添加了这些东西后,都不是问题了。

最终方方面的情况叠加,导致SQL的优化工作越来越少。

而另一个关于SQL 审核的工作这方面的工作也在变革中,原来SQL审核主要是在安全性方面进行工作,SQL 写的对不对,写的好不好,有没有安全或性能风险是一个问题,但是现代整体的开发软件的体系的变化,让这个部分也在变化,没有无缘无故的变化,只是日积月累导致你突然发现,SQL 审核的工作中随着应用的数据库种类的变化,市面上少有全栈的SQL审核工具,开源的更是如此,SQL 审核已经成一个问题,同时对于不同数据库对于DDL 的特性的部分,目前的SQL审核工具也没有智能化的发展,比如POSTGRESQL 发现数据字段类型变化就告警的部分,或者MYSQL 8 ,MYSQL 5.7 对于DDL 不同方式的处理,与告警的区别,所以SQL审核工具更加的智能化,兼容更多的数据库产品是一个问题,所以在目前的状态下,SQL 审核的工作还是需要纯人工的,目前看这个工作是DBA 的一个还需要手工操作的部分。

随着各种国产数据库的部分介入,在SQL 优化方面POSTGRESQL 将是一个重要的部分,基于国产数据库大多基于POSTGRESQL 的为源代码组成,理解POSTGRESQL 的一些语句执行和优化的特点,将是下一个SQL 优化工作的重点。

总结:SQL 优化这个工作会继续存在,但会持续的被各种数据库的变化所减弱,chatgpt 对于SQL的撰写与优化也可能成为一种可以实现的事情,所有使用数据库的类型变了,硬件变了,数据库应用开发的场景变了,唯有 SQL 优化是不变的,你自己信吗 !世界在变化,唯不变的,就是一直在变化 !

adad5b30149c3f0d811a8376e1086485.png

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

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

相关文章

Kubernetes轻量级日志工具Loki安装及踩坑记录

Loki简介 Loki是Grafana出品的一个轻量级日志系统,熟悉ELK的都知道ELK使用起来的成本,而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。 Promtail 用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具&#xff0c…

谷歌Bard更新中文支持;GPT-4:1.8万亿参数、混合专家模型揭秘; Meta推出商用版本AI模型

🦉 AI新闻 🚀 谷歌的AI聊天工具Bard更新,增加中文支持 摘要:谷歌的AI聊天工具Bard新增中文环境,用户可以使用简体和繁体中文进行交流。然而,与竞品相比,Bard的回复略显生硬,语义理…

C# Winfrom将DataGridView数据导入Excel

1.项目添加Word和Excel的COM类型库引用 2.创建Excel工作表 //定义Excel操作对象Microsoft.Office.Interop.Excel.Application excelApp new Microsoft.Office.Interop.Excel.Application();//定义Excel工作表Microsoft.Office.Interop.Excel.Worksheet worksheet excelApp.Wo…

【专题速递】在线K歌、云化XR、咔嚓剪辑和FFmpeg直播能力更新计划

// 在线K歌的技术方案选型有哪些?对于沉浸式XR我们又有什么新的思考?高性能低依赖的剪辑视频需要具备什么技术?7月29日LiveVideoStackCon2023上海站客户端体验与性能优化专场,为您解答。 客户端体验与性能优化 客户端作为直接面…

用Python画一个星空

1 问题 如何用Python画一个简单的星空? 2 方法 在Python中有着各种各样的工具包,比如math、pillow、requests等等,每个包有着自己专门的功能。要用python画星空,在绘制星空的过程中一般需要运用到turtle工具,它是属于P…

PVE虚拟化平台之安装RHEL9系统

PVE虚拟化平台之安装RHEL9系统 一、RHEL9介绍1.1 RHEL9简介1.2 RHEL9新功能 二、上传镜像到PVE存储2.1 检查PVE环境2.2 上传镜像 三、创建虚拟机3.1 设置虚拟机名称3.2 操作系统设置3.3 系统设置3.4 磁盘设置3.5 CPU设置3.6 内存设置3.7 网络设置3.8 确定虚拟机配置 四、安装操…

【刷题】在二叉树中分配硬币

在二叉树中分配硬币 https://leetcode.cn/problems/distribute-coins-in-binary-tree/description/ 描述 给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币。 在一次移动中,我们…

PLSQL Developer怎样查看当前活动会话

点‘工具’-‘会话’: 选择‘Active sessions’: 点击某个会话,可以看到其对应的sql:

Feign技术

说明:Feign和RestTemplate一样,是用于微服务之间通信的,配合注册中心技术Nacos,可以搭建一个完整的SpringCloud环境。本文介绍在NacosFeign环境下,Feign的使用。 环境介绍:创建两个服务,订单服…

Web3的2048,Sui 8192能否打开全链游戏的大门?

作者:Peng SUN,Foresight News Sui 8192:一局游戏就是一个NFT Sui 8192智能合约基于Move语言编写,构成非常简单,包括游戏、Game Board与排行榜(Leaderboard)三部分,覆盖方块移动、…

Linux基本知识/Linux文件夹创建、删除、复制等命令怎么用/grep管道符是啥

前情提要:经过一段时间的沉淀,因为要用到Linux,索性就梳理总结一下Linux的基本知识! 一、Linux文件目录 1.1 结构 是一个树形结构,只有一个根目录/ 1.2 路径描述 linux系统中,路径层次关系用/来表示w…

IDEA安装JRebel插件激活LS client not configued问题

JRebel插件安装步骤:settings->Plugins中搜索JRebel,然后安装即可 这里安装的是最新版本,安装完后会要求重启IDEA,重启后一般会自动弹出JRebel面板,里面有个Activation,点击后弹出激活页面,我…

java 通过Json -schema完成对数据的效验

Json -schema 1.对象的效验2.数组套对象的效验3. 字符串的效验长度效验(minLength)(maxLength)正则效验日期和时间 4.对象套对象效验5.对象套数组6. 其他参数required(必须要填)enum(范围之内)not(不)anyOf 和allOf(双…

C++之重写基类虚函数添加override区别(一百六十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

5. MySQL - JDBC SQL 注入 博客系统(万字详解)

目录 1. 介绍 2. 使用 JDBC 连接数据库 2.1 如何使用 JDBC 连接数据库 2.2 导入的各个类 2.3 DataSource 对象的创建 2.4 从 DataSource 对象中得到 Connection 对象 2.5 创建 Statement 对象 2.6 从 ResultSet 中遍历每行结果,从每行中获取每列的值 2.7 代…

Django-linux主机计划任务查看服务

目录 需求 功能介绍 页面效果 代码编写 docker部署 需求 线上主机一百台左右,经常会在某个服务器上放置一些自动化脚本,并配置计划任务,时间长可能忘记计划任务所在服务器,所以开发一个用于收集展示crontab任务的服务 语言框…

Coremail易念:2022年企业邮件钓鱼模拟演练分析报告

以下为精华版阅读,如需下载完整版,关注【CACTER邮件安全】,后台回复关键词【钓鱼报告】即可免费下载。 Coremail&易念科技《2022年企业邮件钓鱼模拟演练分析报告》重磅发布!有哪些精华亮点,点击下拉。 一、制造业钓…

opencv-07-感兴趣区域(ROI)

在图像处理过程中,我们可能会对图像的某一个特定区域感兴趣,该区域被称为感兴趣区 域(Region of Interest,ROI)。在设定感兴趣区域 ROI 后,就可以对该区域进行整体操作。 以下是一些 OpenCV ROI应用场景 …

【测试开发】自动化测试 selenium 篇

目录 一. 什么是自动化测试 二. selenium 1. selenium的工作原理 2. seleniumJava的环境搭建(Chrome浏览器) 三. selenium中常用的API 1. 定位元素 findElement 1.1 css选择语法 1.2 xpath 2. 操作测试对象 2.1 sendKeys-在对象上模拟按键输入 2.2 click-点击对象…

ECMAScript 6 之二

目录 2.6 Symbol 2.7 Map 和 Set 2.8 迭代器和生成器 2.9 Promise对象 2.10 Proxy对象 2.11 async的用法 2.22 类class 2.23 模块化实现 2.6 Symbol 原始数据类型,它表示是独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型…