新钛云服已累计为您分享663篇技术干货

数据库优化已经成为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语句中,它将查看列,然后推荐最佳数据类型和数据长度。

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

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

结论

数据库优化有点棘手,但完全避免它会对您的web应用程序产生巨大的影响,导致性能问题。

如果你遵循了这10个web开发者数据库优化的最佳实践,你将开始改善用户体验和资源管理。

一旦实现了这些方法,请进一步了解如何提高数据库性能的技巧。

原文链接:https://dzone.com/articles/10-database-optimization-best-practices-for-web-de

往期技术干货

· 万字长文:云架构设计原则|附PDF下载

· 万字长文 | 使用 RBAC 限制对 Kubernetes 资源的访问

· 万字长文 | 面向k8s编程,如何写一个Operator

· Terraform 实战 | 万字长文

· 万字长文 | 在 Kubernetes 中部署高可用应用程序的最佳实践!

· CephFS性能基准测试与集群优化 | 万字总结

· 低代码开发,全民开发,淘汰职业程序员!

· 国内主流公有云VPC使用对比及总结

· Ceph OSD故障排除|万字经验总结

· 运维人的终身成长,从清单管理开始|万字长文!

· OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

· IT混合云战略:是什么、为什么,如何构建?

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

  1. 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图

    初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...

  2. 适合Web开发人员的10个CSS代码生成器

    转载自:微信公众号 qianduan1024 前端开发的同名文章 原文:http://www.hongkiat.com/blog/css-code-generator-web-apps/ 摘要:Web ...

  3. sketch插件开发_适用于Web开发人员的10个免费Sketch插件

    Sketch在Web设计师和开发人员中越来越受欢迎 . 这可能是因为它直观,易学并且具有许多功能,使创建网站原型变得容易得多 . 也可能是因为该应用程序是可扩展的,即您可以借助插件轻松地向该应用程序添 ...

  4. php开发框架_适用于开发人员的10个PHP框架-最佳

    自从第一个内联代码段出现在静态HTML文件中以来,PHP被称为世界上最流行的服务器端脚本语言,它已经发生了很大的发展 . 如今,开发人员需要构建复杂的网站和Web应用程序,而要达到一定的复杂性水平, ...

  5. 解开发者之痛:中国移动MySQL数据库优化最佳实践

    章颖 数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任中国电信综合平台开发运营中心DBA 开源数据库MySQL比较容易碰到性能瓶颈, ...

  6. 移动 网络 连mysql_中国移动MySQL数据库优化最佳实践

    本文根据DBAplus社群第69期线上分享整理而成,文末还有书送哦~ 讲师介绍章颖 数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任 ...

  7. 前端性能优化最佳实践(转)

    转载请注明: 转载自WEB前端开发(www.css119.com)-关注常见的WEB前端开发问题.最新的WEB前端开发技术(webApp开发.移动网站开发).最好的WEB前端开发工具和最全的WEB前端 ...

  8. 有抱负的 Web 开发人员应该在 2021 年学习的 10 件事

    大家好,如果您是一名 Web 开发人员,并且想知道 2021 年应该学习哪些内容以将您的技能提升到一个新的水平,或者想在 2021 年成为一名前端开发人员,但不确定哪些技术.工具.框架.语言,和图书馆 ...

  9. Web开发人员月报2018年10月

    第四期! 如果您错过了过去的三个月,请在 这里 , 这里 和 这里查看 . 如果您是第一次来这里(否则请跳到下面) 成为网络开发人员是一种绝佳的职业选择. 您有很多工作机会,可以在世界各地工作,并且可 ...

最新文章

  1. R语言dataframe数据列中的缺失值NA的个数统计实战:特定数据列的NA值统计、所有特征的NA值统计
  2. python解包裹_关于Python中包裹传参和解包裹的理解
  3. 计算机三级网络技术查漏补缺
  4. ASP.NET 文件操作实例
  5. PMCAFF|来来来!我们一起重新设计微信公众号(图多杀猫 慎重浏览)
  6. Zabbix最佳实践一:Zabbix4.0.2的安装与配置
  7. 浅谈Taro和Apollo在开发过程中的实践
  8. pymongo操作方法
  9. Mybatis 原始Dao层开发
  10. 《算法:C语言实现》——连通性
  11. shell脚本七十问
  12. 贺利坚老师汇编课程50笔记:call和ret配合
  13. c语言编写cad建筑画图程序,CAD建筑平面图绘图步骤试题.doc
  14. (一)SLAM拓扑地图(地图的生成和显示)
  15. android发送短信验证码并自动获取验证码填充文本框
  16. 基于springboot的4s店车辆管理系统-计算机毕业设计(源码+数据库+Lw文档)
  17. 2020英语计算机统考成绩多久出来,网络教育2020年12月统考成绩查询时间已经公布:1月24日...
  18. mapbox-gl开发:deck.gl轨迹图效果
  19. 数据中心解决方案之灾备方案设计(下)
  20. 用墨刀做出的交互动效,10个优秀作品欣赏

热门文章

  1. Ubuntu真机下MTK平台FAE自助脚本调试工具,无需驱动工程师协助(shell源码开源)
  2. 无法在Web服务器上启动调试。调试器无法连接到远程计算机。原因可能是远程计算机不存在或防火墙阻止与远程计算机通信。
  3. 【池化技术】池化技术基础和原理
  4. STM32固件库(标准外设库)入门学习 第六章TIM定时器(一)
  5. 手绘与码绘————趣味交互式绘画系统的实现
  6. List集合的复制方式
  7. 51单片机的有符号数和无符号数运算
  8. python爬虫入门必看——七行python爬虫代码
  9. 51单片机中 bit和sbit区别
  10. 怎样避免短信验证码发送失败