Web开发人员的10个数据库优化最佳实践

news2024/12/23 5:48:53

数据库优化已经成为web开发人员提高web应用程序性能,从而改善用户体验的关键。对一些人来说,这可能听起来不太吸引人,但如果能正确地优化数据库,就可以提高性能、减少瓶颈并节省资源。

幸运的是,有些优化技术在sql查询中不需要dba级别(数据库管理员)的专业知识。

为了帮助你开始,我们将看看10个最佳实践,为web开发者如何优化你的数据库。一旦您了解了这些,您就可以更深入地研究数据库优化。


一、在选择查询中使用EXPLAIN

使用EXPLAIN关键字是快速修复慢速查询的好方法。它让您了解如何执行查询,并帮助您找到查询优化的潜在位置。

只需在SELECT查询前输入EXPLAIN关键字。这不会触发实际的查询,相反,您将看到执行计划。

当您仔细查看结果时,您将能够确定潜在的瓶颈或任何其他问题,如缺少索引,并减少扫描行的数量。

有了EXPLAIN工具,您可以优化查询,如果有必要,甚至可以改进表结构。


二、向搜索列添加索引

如果您按特定列搜索表,则很可能通过索引该列来提高查询性能。

通过向搜索列添加索引,可以减少响应时间并优化资源使用。尽管索引可能对所有查询都没有帮助,但在大多数情况下它绝对有用。

但是要记住,有索引的表比没有索引的表需要更多的时间来更新。这是因为索引也需要更新。因此,明智的做法是只为频繁搜索的列创建索引,而不是为更新比读取次数更多的表创建索引。


三、尽可能的使用标识字段

在表中使用Identity字段作为主键有几个好处。

首先,它更快—您可以在查询中简单地使用整数,而不是更长的字符串字段。这将为您节省一些内存,因为整数可以更短。

其次,它更安全——使用应用程序数据字段可能会导致许多问题。例如,如果您使用名称或地址作为PRIMARY KEY,那么如果客户端或用户更改了他们的名称、移动了,甚至只是出现了拼写错误,那么您可能会遇到问题。

因此,为了加快查询速度并提高工作效率,可以在每个表中添加一个Identity列,这样就可以使用它作为一个PRIMARY KEY,并使用AUTO_INCREMENT和一个合适类型的INT变量。


四、默认情况下避免使用 NULL 值

尽量使用NOT NULL代替NULL。

一般来说,选择NOT NULL意味着更快的查询,这得益于更有效地使用索引,并避免了专门测试每个值是否为NULL的需要。最重要的是,你使用更少的存储空间,根据MySQL文档,NULL列需要额外的空间。

节省空间是特别重要的,如果你使用一个网络主机为你的数据库,因为即使一些最好的网络主机服务也不能提供无限的存储空间。现在,每个专栏节省一个比特看起来并不是很多,但是如果你在经营一个电子商务商店,有成千上万的产品,你会节省很多资源。

使用NOT NULL,您将能够像处理任何变量一样处理字段,同时避免使用NULL可能产生的某些边缘情况。

当然,仍然有一些情况下使用NULL更有益—但在大多数情况下,您可以使用NOT NULL实现相同的结果。


五、对查询使用无缓冲模式

为了节省时间和内存,可以使用无缓冲查询。

默认情况下,SQL查询使用缓冲模式。这会增加您的等待时间并消耗资源,因为在查询完成之前不会返回结果—而是存储在内存中。如果是较大的查询,并且您有一个巨大的数据库,那么使用缓冲查询将需要大量内存。

相比之下,当使用无缓冲查询时,在执行查询之前不会自动存储结果。一旦检索到第一行,您就可以开始处理它们。

但是请记住,在处理结果集时,未缓冲查询不允许在同一个连接上发出进一步的查询。


六、使列紧凑

优化磁盘空间对于保持数据库引擎良好运行至关重要。确保不会影响性能的一种非常简单的方法是使用小而紧凑的列。

因此,您应该始终选择对您的应用程序最有用的整数类型。例如,如果您知道您的表不会有大量的行,那么不要自动使用INT作为主键—您实际上可能会从使用SMALLINT甚至TINYINT中受益。

对于DATE和DATETIME也是如此——如果您不特别需要时间部分,只需使用DATE即可。DATETIME数据类型占用8个字节,而DATE只占用3个字节—因此这样可以节省5个字节。


七、保持表的静态(固定长度)

另一种优化数据库性能的方法是使用静态表。

这意味着您的表不应该包括任何长度可变的列,如TEXT或BLOB。您可以使用CHAR、VARCHAR、BINARY和VARBINARY列,但是需要填充它们以匹配指定的列宽度。

使用固定长度的表是有益的,因为它们更快,更容易缓存。除此之外,静态表更安全——它们在崩溃后更容易重建。

但是,静态表在某些情况下可能比动态格式的表需要更多的磁盘空间—特别是当您使用CHAR和VARCHAR列时。但是性能上的改进可能会超过对磁盘空间的任何关注。


八、安装对象关系映射器(ORM)

使用ORM是优化数据库工作方式的另一种好方法。

首先,ORM有助于消除人为错误因素,因为它为您做了很多事情。您不必自己编写那么多代码,而且ORM会为您处理许多重复的任务,从而减少您的工作量。

ORM还可以提高系统的安全性,因为准备和清理查询使SQL注入变得更加困难。

最重要的是,ORM将在内存中缓存实体,这减少了数据库和CPU的负载。

当然,ORM有其优点和缺点,可能并不完全适合您的使用。但是有一些简单的方法可以避免滥用对象-关系映射。此外,还有一些其他的性能调优和优化插件可能更适合您。


九、批量执行DELETE和UPDATE查询

删除和更新数据——尤其是在非常大的表中——可能会很复杂。这可能会花费很多时间,而且这两个命令都作为单个事务执行。这意味着,如果出现任何中断,整个事务都必须回滚,这可能会更加耗时。

但是,如果您遵循了批量运行DELETE和UPDATE查询的良好实践,您将能够通过增加并发性和减少瓶颈来节省时间。

如果一次删除和更新的行数较少,则可以在将批提交到磁盘时执行其他查询。而且您可能需要做的任何回滚都将花费更少的时间。


十、使用程序分析()获得更多提示

优化数据库的最后一个最佳实践是使用内置功能:PROCEDURE ANALYSE()。更具体地说,如果将该命令添加到某个SQL语句中,它将查看列,然后推荐最佳数据类型和数据长度。

在将新数据导入到表中之后——或者甚至检查现有表中是否存在不一致的地方——这可能特别有用。

如果您实现了这些建议,您可能会节省一些空间。然而,请记住,这些只是建议,你必须真正考虑它们是否适合你的特定目的。


作者:Kaarle Varkki

更多内容请关注公号云原生数据库”

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

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

相关文章

sqlserver object_id()函数学习

在SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id(name,type)方法, 语法:object_id(objectname)或object(objectname,type) 作用:该函数会返回指定对象的ID值&#xf…

springboot 整合ehchace 缓存教程

ehcache介绍 Ehcache是一种高性能、开源的Java缓存框架,被广泛应用于许多大规模、高并发的分布式系统中。它提供了一种快速、可扩展、分布式的数据缓存方案,支持各种内存级别的缓存、磁盘级别的缓存、分布式缓存等。Ehcache设计目标主要是提供高性能和可…

【LeetCode】198.打家劫舍

198.打家劫舍(中等) 思路 定义数组 dp, dp[i] 表示抢劫到第 i 个房子的时候,可以抢劫的最大数量。dp[i] 有两种可能:一种是我们选择不抢劫这个房子,此时累积金额为 dp[i-1] ;另一种是我们选择抢…

儿童用灯哪个品牌好?推荐专业的儿童护眼台灯

一款好的儿童台灯,主要是从5个方面决定,照度及均匀度,蓝光,色温,显指,频闪 ① 照度及均匀度最高是国AA级,其次就是国A级 ② 蓝光一定要选择RG0无危险级,蓝光能量最强,…

给你安利一款不需要魔法就能免费使用的idea插件Bito-ChatGPT

一款不需要魔法就能免费使用的idea插件Bito-ChatGPT 一 、写在前面二、Bito是什么? 🔑🔑 **What does Bito AI do?**三 、安装Bito四、使用Bito4.1 创建个人工作空间4.2 使用Bito4.2.1 问任何技术问题(Ask any technical questio…

端口聚合与Hash算法

目录 前言 一、Hash算法简介 二、负载分担 1.逐流负载分担 2.逐包负载分担 三、Hash算法与负载分担 1.转发原理 四、堆叠情况下的负载分担 五、配置流程 前言 提示:关于Hash与负载分担方式 提示:以下是本篇文章正文内容,下面案例可供…

Win11电脑桌面的图标变成白色了怎么解决?

Win11电脑桌面的图标变成白色了怎么解决?有用户将自己的电脑开机之后,出现了桌面图标变成白色的情况,虽然软件还是可以正常的打开,但是图标消失了看起来非常的不习惯,那么这个问题要怎么去解决呢?来看看以下…

PP825A 3BSE042240R3转换为后备控制系统和控制系统中的报警系统

​ ​ PP825A 3BSE042240R3转换为后备控制系统和控制系统中的报警系统 步进系统(Stepper motor)的优缺点是什么 步进电机-直流电流产生磁场。它是恒流系统。由于转子极数,扭矩随速度下降。 步进电机的优点 设计简单 控制简单 出色的低速扭矩…

德国 DocuWare 文档管理软件平台

DocuWare 是一个先进的平台,可让您集中、快速、有效地管理、处理和利用业务信息。 我们的文档管理和工作流程解决方案的各项功能可以集成到任何 IT 系统中,可以数字化任何部门的手动或纸质业务流程。提高您公司的生产力,让您的团队更轻松地完…

Matlab与ROS---TF坐标系(七)

0. 简介 我们上面讲了最基础的通信机制以及在Matlab中如何使用这些通信,下面我们这一讲来主要介绍ROS当中最常用的TF坐标系在Matlab中的使用。tf是分布式的,因此所有的坐标帧信息对ROS网络中的每个节点都是可用的。所以这一节就是带领读者熟悉该怎么在M…

gpt人工智能写论文怎么样-chatGTP如何写论文

用gpt写论文怎么样 使用 GPT 写论文具体的操作方法因人而异,但可以提供一些建议: 充分理解论文的题目、主题和结构,并确定论文所需的内容和方向。 针对论文的不同部分,使用 GPT 模型进行自动化生成或补充,例如摘要、…

Android签名 一 查看签名信息

你可能想知道 通过这篇文章可以解决哪些问题以及学到什么: 1.如果我们有一个应用,如何查看应用的签名信息? 2.如果我们有签名原始文件,如何查看签名文件中的签名信息? 这篇文章介绍了如何查看应用和签名文件中的签名信…

DiskGenius硬盘分区及数据恢复软件

目录 一、DiskGenius介绍 二、DiskGenius下载 三、DiskGenius功能 1、软件详细教程 2、将空闲空间合并到现有分区 3、无损扩容分区 4、注意事项: 一、DiskGenius介绍 DiskGenius是一款硬盘分区及数据恢复软件。它是在最初的DOS版的基础上开发而成的。Window…

PMP课堂模拟题目及解析(第3期)

21. 一家农业设备制造商因一个缺陷部件而召回数千个产品。这个问题导致许多客户不满,公司花费 500 万美元来修理和更换零件。哪一种成本预算类型可以防止这个问题? A. 非一致性成本 B. 一致性成本 C. 矩阵图 D. 多标准决策分析 22. 一位团队成员…

轨迹预测Leapfrog Diffusion Model for Stochastic Trajectory Prediction

结构速览 论文速读解决什么问题解决这个问题的几个关键点总体架构上面提出了哪些创新如何实现蛙跳如何处理轨迹表达和训练问题 0.Abstract1. Introduction第一段(介绍轨迹预测这个研究方向)第二段(前人未来轨迹预测方面的研究有哪些&#xff…

EEG微状态的皮层电图激活模式

前言 脑电图(EEG)微状态是表征大脑静息态网络自发激活的短暂连续的稳定头皮场电位。脑电微状态被假定介导局部活动模式。为了验证这一假设,本研究将瞬时全局脑电微状态动力学与皮层脑电图(ECoG)和立体定向脑电图(SEEG)深度电极记录的局部时间谱演变相关联。假设这些…

打造高性能网站:使用 nginx、MySQL 和 PHP 编译,搭建 LNMP 环境并安装 WordPress实战

前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人 &#xff0…

camunda错误事件的用途

在Camunda中,错误事件是一种可以在任务或操作执行过程中捕获错误并进行处理的事件类型。使用错误事件可以提高工作流的可靠性和容错性,避免由于错误操作导致的工作流中断或数据丢失等问题。 使用错误事件可以处理以下情况: 1、捕获错误并进…

K8s基础3——应用部署流程、服务编排、集群资源利用率、日志管理

文章目录 一、应用部署流程二、服务编排2.1 YAML文件格式说明2.2 部署应用2.2.1 命令部署2.2.2 yaml文件部署2.2.2.1 编写deployment.yaml文件2.2.2.2 编写service.yaml文件2.2.2.3 两个yaml文件混用2.2.2.4 测试——service和deployment的标签不一致导致访问网页混乱 2.2.3 自…

用JIRA管理你的项目——(三)基于LDAP用户管理

JIRA提供了基于LDAP方式的用户管理,也就是用户密码的管理交给LDAP,而JIRA只管理用户在系统中的角色。 相关链接: 用JIRA管理你的项目——(一)JIRA环境搭建 用JIRA管理你的项目——(二)JIRA语言…