广东营销网站建设/厦门网站推广公司哪家好
10.6. 数据库开发常识
作为一名专业数据库开发人员,不但需要掌握数据库开发相关的语法和功能实现,还要掌握专业数据库开发的常识。这样,才能在保量完成工作任务的同时,也保质的完成工作任务,避免了为应用的日后维护埋下性能和稳定性方面的隐患。可遗憾的是,现实中,很大一部分的专业开发人员只能做到保量的完成工作任务,而做不到既保量也保质。这也就不难解释,现实中,为什么很多应用系统上线后,性能和稳定性等方面还频繁的出现问题。
这里所谓的数据库开发常识,指经过长期不断的基础理论和实践经验的积累与沉淀,专业人员获得的数据库开发方面的规律和结论,用以帮助提高数据库开发工作的效率,更重要的是保证开发成果的质量。
下面仅就实际工作中最常遇到的,也是最常用到的数据库开发常识进行介绍和说明,以期对各位有所启发和帮助。
10.6.1. 判断SQL性能的标准
目前几乎所有高版本关系库(RDB,Relational Database)的优化器都是CBO(见本专栏6.1节)的,那么,判断一条SQL语句性能好坏的标准只有一个,那就是执行计划(Explain Plan)及其成本。拿到一条SQL语句的执行计划前,我们没办法准确判断其性能的好坏及问题所在。因此,我们不但要掌握获取执行计划的方法,也要学会查看和分析执行计划,起码要会查看和分析简单的执行计划。
10.6.2. 索引相关误区
1)走索引一定是最优的。
查看和分析执行计划时,有一个大家似乎公认的调优原则,那就是:走FTS就一定是错的,存在性能问题的;走index就一定是对的,是最优的。针对这种观点,我只能说:不一定,要看具体的实际情况。大家先考虑下为什么这么说?为了便于理解,我们考虑两个比较极端的场景。
- 第一个场景,假设表里的数据比较少,一个数据块就能容纳,并且,表的相应列上有B*Tree索引,假设索引也只有一个数据块。我们哪怕只访问表里的一条数据时,当不走索引时,我们只需读取一个数据块就可以,那就是表的所有数据块;如果走索引,那么,就得读取两个数据块,先读索引块,然后,读表的数据块,大家比较下,哪个成本高哪个成本低呢?
- 另一个场景,假设一个表有100个数据块,索引有20个数据块。当我们读取表里90%的数据时,如果不走索引,那么,只需要读取表的100个数据块;而如果走索引,就得读取至少18+90=108个数据块。这么看,走索引似乎有点得不偿失,大家比较下,该场景下,哪个成本高哪个成本低呢?
- 当然,以上只是通过这两个极端、理想的场景说明一个道理:走index未必最优,走FTS也未必就有问题。现实中,场景和成本计算都要比这里复杂得多,也还会涉及到其他概念和因素,例如:FTS的并行多块读,index的顺序读,索引的聚簇因子(Cluster Factor)等,这些都会影响SQL语句的最终执行计划。
--注:
1)大家思考下,当读取相同的数据块数时,并行多块读和顺序读的区别和结果分别是什么?
2)这里大家需要思考一个问题,那就是在现实工作中,有时查询一张表所读取的数据块数比整张表的数据块数还要多,有时是整张表数据块数的几倍甚至几十倍,为什么?
2)索引可随便创建
现实工作中,很多公司或机构的开发库、测试库甚至生产库的管理和权限控制,既很不严格,也非常不规范。所有或部分员工都可以随便访问数据库,且都拥有修改数据、建立、删除索引及其他对象,甚至数据库的最高权限。现实中,由于员工随便删除索引导致事故的案例并不稀奇,因员工随便乱建索引而引发数据库负载居高不下、性能陡降,甚至引起严重事故的现象也是屡见不鲜。
因此,规范数据库管理和严控数据库权限,尤其是机构生产库的管理和权限,会很大程度上避免事故的发生和减少由此带来的损失。由此,也杜绝了无序的乱建索引而引发的一系列问题和后果。现实工作中,除非确定索引能极大的改善某个应用模块或操作的性能,且不会对其他应用模块或操作带来负面影响,否则,还是三思而后行,最好通过规范的流程和渠道去分析、确定和实施索引策略。
--注:
1)大家思考下,删除索引为什么会导致事故?随便建索引又为什么会导致负载居高不下、性能陡降,甚至引起事故?
相关文章:

数据库开发常识(10.6)——SQL性能判断标准及索引误区(1)
10.6. 数据库开发常识 作为一名专业数据库开发人员,不但需要掌握数据库开发相关的语法和功能实现,还要掌握专业数据库开发的常识。这样,才能在保量完成工作任务的同时,也保质的完成工作任务,避免了为应用的日后维护埋…...

网络爬虫js逆向之某音乐平台案例
【注意!!!】 前言: - 本章主要讲解某音乐平台的js逆向知识 - 使用关键字搜定位加密入口 - 通过多篇文章【文字案例】的形式系统化进行描述 - 本文章全文进行了脱敏处理 - 详细代码不进行展示,需要则私聊作者 爬虫js逆向…...

Spark--算子执行原理
一、sortByKey SortByKey是一个transformation算子,但是会触发action,因为在sortByKey方法内部,会对每个分区进行采样,构建分区规则(RangePartitioner)。 内部执行流程 1、创建RangePartitioner part&…...

事件驱动架构(EDA)
事件驱动架构(Event-Driven Architecture, EDA)是一种软件架构模式,其中系统的行为由事件的产生和处理驱动。在这种架构中,系统的组件通过事件进行交互,而不是通过直接的调用或者请求响应方式。 关键概念 事件&#x…...

C++ 入门速通-第5章【黑马】
内容来源于:黑马 集成开发环境:CLion 先前学习完了C第1章的内容: C 入门速通-第1章【黑马】-CSDN博客 C 入门速通-第2章【黑马】-CSDN博客 C 入门速通-第3章【黑马】-CSDN博客 C 入门速通-第4章【黑马】-CSDN博客 下面继续学习第5章&…...

2025春招,深度思考MyBatis面试题
大家好,我是V哥,2025年的春招马上就是到来,正在准备求职的朋友过完年,也该收收心,好好思考一下自己哪些技术点还需要补一补了,今天 V 哥要跟大家聊的是MyBatis框架的问题,站在一个高级程序员的角…...

排序算法--冒泡排序
冒泡排序虽然简单,但在实际应用中效率较低,适合小规模数据或教学演示。 // 冒泡排序函数 void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) { // 外层循环控制排序轮数for (int j 0; j < n - i - 1; j) { // 内层循环控制每轮比…...

简易C语言矩阵运算库
参考网址: 异想家纯C语言矩阵运算库 - Sandeepin - 博客园 这次比opencv快⑥倍!!! 参考上述网址,整理了一下代码: //main.c#include <stdio.h> #include <stdlib.h> #include <string.h…...

通过C/C++编程语言实现“数据结构”课程中的链表
引言 链表(Linked List)是数据结构中最基础且最重要的线性存储结构之一。与数组的连续内存分配不同,链表通过指针将分散的内存块串联起来,具有动态扩展和高效插入/删除的特性。本文将以C/C++语言为例,从底层原理到代码实现,手把手教你构建完整的链表结构,并深入探讨其应…...

【分布式架构理论3】分布式调用(2):API 网关分析
文章目录 一、API 网关的作用1. 业务层面:简化调用复杂性2. 系统层面:屏蔽客户端调用差异3. 其他方面: 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1:同步阻塞处理2. Zuul2:异步非阻塞处理 三…...

基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构
每个服务使用一台独立的服务器的可行部署方案,尤其是在高并发、高可用性要求较高的场景中。这种方案通常被称为分布式部署或微服务架构。以下是针对您的VoIP管理系统(基于Kamailio、MySQL、Redis、Gin、Vue.js)的详细分析和建议。 1. 分布式部…...

6S模型的编译问题解决
使用python处理遥感光谱数据,免不了进行大气校正,基本上免费的就是使用Py6s,而py6s库只是一个接口,还需要自己配置6S模型,可以查到很多资料,6S模型是古老的fortran语言写的,基本配置流程就是安装…...

C++11详解(二) -- 引用折叠和完美转发
文章目录 2. 右值引用和移动语义2.6 类型分类(实践中没什么用)2.7 引用折叠2.8 完美转发2.9 引用折叠和完美转发的实例 2. 右值引用和移动语义 2.6 类型分类(实践中没什么用) C11以后,进一步对类型进行了划分&#x…...

实验十四 EL和JSTL
实验十四 EL和JSTL 一、实验目的 1、掌握EL表达式的使用 2、掌握JSTL的使用 二、实验过程 1、在数据库Book中建立表Tbook,包含图书ID,图书名称,图书价格。实现在bookQuery.jsp页面中模糊查询图书,如果图书的价格在50元以上&#…...

为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入
byType找到多种实现类导致报错 Autowired: 通过byType 方式进行装配, 找不到或是找到多个,都会抛出异常 我们在单元测试中无法进行字段注入 字段注入通常是 private 修饰的,Spring 容器通过反射为这些字段注入依赖。然而,在单元测试中&…...

DeepSeek大模型介绍、本地化部署与使用!【AI大模型】
一、DeepSeek 是什么? 1.技术定位 专注大模型与AGI研究,开发高性能基座模型(如 DeepSeek LLM 系列),支持长文本、多模态、代码生成等复杂任务。 提供开源模型(如 DeepSeek-MoE、DeepSeek-V2)…...

备考蓝桥杯嵌入式4:使用LCD显示我们捕捉的PWM波
上一篇博客我们提到了定时器产生PWM波,现在,我们尝试的想要捕获我们的PWM波,测量它的频率,我们应该怎么做呢?答案还是回到我们的定时器上。 我们知道,定时器是一个高级的秒表(参考笔者的比喻&a…...

智能化转型2.0:从“工具应用”到“价值重构”
过去几年,“智能化”从一个模糊的概念逐渐成为企业发展的核心议题。2024年,随着生成式AI、大模型、智能体等技术的爆发式落地,中国企业正式迈入智能化转型的2.0时代。这一阶段的核心特征是从单一场景的“工具应用”转向全链条的“价值重构”&…...

机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战
前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …...

9.PPT:儿童孤独症介绍【22】
目录 NO12345 NO6789 NO12345 1-3张素材.txt中的大纲→素材文档PPT.pptx设计→主题→积分字体:幻灯片母版在幻灯片母版右上角的相同位置插入任一剪贴画,改变该剪贴画的图片样式、为其重新着色,并使其不遮挡其他文本或对象 开始→版式动画…...

离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码
大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP)是经典旅行商问题(TSP)在规模上的扩展,是一个具有重要理论和实际意义的组合优化问题: 一、问题定义 给定一组城市和它们之间的…...

Java 引入和使用jcharset,支持UTF-7字符集
一、背景说明 Java标准库不直接支持UTF-7字符集,但通过我们可以使用第三方库jcharset方便地处理UTF-7编码的数据。 二、引入说明 JDK8及以下版本,我们将jcharset.jar并将其放到${JAVA_HOME}/jre/lib/ext/下即可完成引入。 JDK17及以后版本,对…...

rust安装笔记
安装笔记 安装加速cargo 国内源nightly版本安装其他目标将现有项目迁移到新版本升级 安装加速 export RUSTUP_UPDATE_ROOT"https://mirrors.ustc.edu.cn/rust-static/rustup" export RUSTUP_DIST_SERVERhttps://mirrors.tuna.tsinghua.edu.cn/rustup curl --proto h…...

扣子平台的选择器节点:让智能体开发更简单,扣子免费系列教程(17)
欢迎来到涛涛聊AI。今天,我们来聊聊一个非常实用的工具——扣子平台的选择器节点。即使你不是计算机专业人员,但对计算机操作比较熟悉,这篇文章也能帮你快速上手。我们会从基础知识讲起,一步步带你了解选择器节点的使用方法和应用…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_sprintf_num 函数
ngx_sprintf_num 声明就在 ngx_string.c 的开头 static u_char *ngx_sprintf_num(u_char *buf, u_char *last, uint64_t ui64,u_char zero, ngx_uint_t hexadecimal, ngx_uint_t width); ngx_sprintf_num 实现 static u_char * ngx_sprintf_num(u_char *buf, u_char *last,…...

Vue的状态管理:用响应式 API 做简单状态管理、状态管理库(Pinia )
文章目录 引言单向数据流多个组件共享一个共同的状态I 用响应式 API 做简单状态管理使用 reactive()创建一个在多个组件实例间共享的响应式对象使用ref()返回一个全局状态II 状态管理库Pinia枚举状态管理引言 单向数据流 每一个 Vue 组件实例都在“管理”它自己的响应式状态了…...

AI工具如何辅助写文章(科研版)
文章总览:[YuanDaiMa2048博客文章总览](https://blog.csdn.net/2301_79288416/article/details/137397359?spm=1001.2014.3001.5501)https://blog.csdn.net/2301_79288416/article/details/137397359?spm=1001.2014.3001.5501 在科研领域,撰写论文是一个复杂且耗时的过程。…...

LEED绿色建筑认证的重要意义
LEED(Leadership in Energy and Environmental Design)绿色建筑认证由美国绿色建筑委员会(USGBC)开发,是全球广泛认可的绿色建筑评估体系。其重要意义体现在以下几个方面: 1. 环境保护 资源节约࿱…...

阿里云 ubuntu22.04 中国区节点安装 Docker
下面是一份在 Ubuntu 22.04 (Jammy) 上,通过阿里云镜像源来安装并配置 Docker 的详细步骤示例,可在中国区阿里云节点使用: 一、卸载旧版本 (如已安装) 如果系统中已经安装了旧版 Docker (可能是 docker、docker-engine、docker.io、containe…...

【kafka的零拷贝原理】
kafka的零拷贝原理 一、零拷贝技术概述二、Kafka中的零拷贝原理三、零拷贝技术的优势四、零拷贝技术的实现细节五、注意事项一、零拷贝技术概述 零拷贝(Zero-Copy)是一种减少数据拷贝次数,提高数据传输效率的技术。 在传统的数据传输过程中,数据需要在用户态和内核态之间…...