数据库优化已成为Web开发人员提高Web应用程序性能从而改善用户体验的关键。对某些人来说,这可能听起来并不吸引人,但好处是值得的。如果正确优化数据库,则可以提高性能、减少瓶颈并节省资源。幸运的是,有一些优化技术不需要DBA级别(数据库管理员)的SQL查询专业知识。为了帮助您入门,我们将为Web开发人员介绍10个关于如何优化数据库的最佳实践。一旦你理解了这些,你就可以更深入地研究数据库优化。1.在选择查询中使用EXPLAIN使用EXPLAIN关键字是快速修复缓慢查询的好方法。它让您了解查询是如何执行的,并帮助您找到查询优化的潜在位置。只需在SELECT查询之前输入EXPLAIN关键字。这不会触发实际查询,相反您会看到执行计划。当您仔细查看结果时,您将能够识别潜在的瓶颈或任何其他问题,例如缺少索引,并减少扫描的行数。使用EXPLAIN工具,您可以优化查询,甚至可以在必要时改进表结构。二、为搜索列添加索引如果按特定列搜索表,很可能可以通过为该列建立索引来提高查询性能。通过向搜索列添加索引,您可以减少响应时间并优化资源使用。虽然索引可能不会对所有查询都有帮助,但在大多数情况下它确实有用。但请记住,有索引的表比没有索引的表需要更多的时间来更新。这是因为索引也需要更新。因此,明智的做法是只为经常搜索的列建立索引,而不是为更新频率高于读取频率的表创建索引。三、尽可能使用标识字段使用标识字段作为表中的主键有几个优点。首先,它更快——您可以简单地在查询中使用整数而不是更长的字符串字段。这将为您节省一些内存,因为整数可以更短。其次,它更安全——使用应用程序数据字段会导致很多问题。例如,如果您使用名称或地址作为PRIMARYKEY,如果客户或用户更改他们的名称、移动,甚至只是输入错误,您可能会遇到问题。所以,为了加快你的查询速度,提高你的工作效率,给每个表添加一个Identity列,这样你就可以把它作为PRIMARYKEY,带有AUTO_INCREMENT和合适类型的INT变量。四、避免默认使用NULL值尽量使用NOTNULL代替NULL。通常,选择NOTNULL意味着更快的查询,这要归功于更有效地使用索引,并且避免了专门测试每个值是否为NULL的需要。最重要的是,您使用的存储空间更少,而且根据MySQL文档,NULL列需要额外的空间。如果您为数据库使用虚拟主机,那么节省空间尤为重要,因为即使是一些最好的虚拟主机服务也不提供无限的存储空间。现在,每列节省一点点可能看起来并不多,但如果您经营一家拥有数千种产品的电子商务商店,您将节省大量资源。使用NOTNULL,您将能够像对待任何变量一样对待字段,同时避免使用NULL可能产生的一些边缘情况。当然,仍然存在使用NULL更有利的情况——但在大多数情况下,您可以使用NOTNULL获得相同的结果。5.查询使用无缓冲模式为了节省时间和内存,可以使用无缓冲查询。默认情况下,SQL查询使用缓冲模式。这会增加您的等待时间并消耗资源,因为在查询完成之前不会返回结果-它们存储在内存中。如果它是一个较大的查询,并且您有一个庞大的数据库,那么使用缓冲查询将需要大量内存。相反,当使用无缓冲查询时,在执行查询之前不会自动存储结果。检索到第一行后,您就可以开始处理它们了。但请记住,在处理结果集时,无缓冲查询不允许在同一连接上发出更多查询。6.使列紧凑优化磁盘空间对于保持数据库引擎良好运行至关重要。确保不影响性能的一种非常简单的方法是使用小型、紧凑的色谱柱。因此,您应该始终选择对您的应用程序最有用的整数类型。例如,如果您知道您的表不会有大量行,那么就不要自动使用INT作为主键——您实际上可能会从使用SMALLINT甚至TINYINT中获益。DATE和DATETIME也是如此——如果您不特别需要时间部分,只需使用DATE。DATETIME数据类型占用8个字节,而DATE只占用3个字节-因此这节省了5个字节。7.保持表静态(固定长度)优化数据库性能的另一种方法是使用静态表。这意味着您的表不应包含任何可变长度的列,例如TEXT或BLOB。您可以使用CHAR、VARCHAR、BINARY和VARBINARY列,但需要填充它们以匹配指定的列宽。使用固定长度的表是有益的,因为它们更快且更容易缓存。除此之外,静态表更安全——它们在崩溃后更容易重建。但是,在某些情况下,静态表可能需要比动态格式化表更多的磁盘空间——尤其是当您使用CHAR和VARCHAR列时。但性能改进可能会超过对磁盘空间的任何担忧。8.安装对象关系映射器(ORM)使用ORM是另一种优化数据库工作方式的好方法。首先,ORM有助于消除人为错误因素,因为它为您做了很多事情。您不必自己编写那么多代码,ORM会为您处理许多重复性任务,从而减少您的工作量。ORM还可以提高系统的安全性,因为准备和清理查询会使SQL注入变得更加困难。最重要的是,ORM会将实体缓存在内存中,从而减少数据库和CPU的负载。当然,ORM各有利弊,可能并不完全适合您的使用。但是有一些简单的方法可以避免滥用对象关系映射。此外,还有一些其他性能调整和优化插件可能更适合您。9.批量删除和更新查询删除和更新数据——尤其是在非常大的表中——可能很复杂。这可能会花费很多时间,并且这两个命令都作为单个事务执行。这意味着如果有任何中断,整个事务都必须回滚,这可能会更耗时。但是,如果您遵循批量运行DELETE和UPDATE查询的良好做法,您将能够通过增加并发性和减少瓶颈来节省时间。如果一次删除和更新的行数很少,则可以在将批处理提交到磁盘时执行其他查询。您可能需要做的任何回滚都将花费更少的时间。十、使用程序分析()获得更多提示优化数据库的最后一个最佳实践是使用内置函数:PROCEDUREANALYZE()。更具体地说,如果您将命令添加到SQL语句,它将查看列并推荐最佳数据类型和数据长度。这在将新数据导入表后尤其有用——甚至检查现有表的不一致性。如果您实施这些建议,您可能会节省一些空间。但是,请记住,这些只是建议,您必须认真考虑它们是否适合您的特定目的。结论数据库优化有点棘手,但完全避免它会对您的Web应用程序产生巨大影响,从而导致性能问题。如果您遵循这10个针对Web开发人员的数据库优化最佳实践,您将开始改善用户体验和资源管理。实施这些方法后,请继续学习有关如何提高数据库性能的技巧。原文链接:https://dzone.com/articles/10-database-optimization-best-practices-for-web-de
