【.com快译】数据库优化对于开发人员提高Web应用程序的性能,进而改善用户体验至关重要。如果方法得当,不仅可以提高目标数据库的性能,还可以减少业务能力的瓶颈,节省系统资源的占用。当然,除了寻找和应用那些专业的DBA(数据库管理员)级别的优化技术外,Web开发者还可以尝试采用以下十种针对SQL查询的数据库优化实践。1.对SELECT查询使用EXPLAIN通过深入了解你的应用程序如何执行查询来找到潜在的优化位置,可以说使用EXPLAIN关键字是快速修复那些缓慢查询的好方法。我们只需要在SELECT查询前键入EXPLAIN关键字,就可以深入了解具体的执行计划,而无需触发实际的查询。通过仔细分析执行结果,我们可以找出那些潜在的瓶颈和相关的编程问题。例如:缺少索引,或者需要减少扫描的行数,甚至需要改进数据表的结构。2、在搜索列中加入索引如果需要根据特定的列来搜索数据表,可以通过在列中加入索引来减少响应时间,提高查询性能,优化资源的使用。虽然我们创建的索引可能不能保证对所有查询都有效,但在大多数情况下,它们仍然可以有立竿见影的效果。当然,任何事情都有两个方面,创建索引表比创建索引表花费的时间更多。毕竟索引也需要及时更新,才能反映数据表的正确状态。因此,更明智的做法是只为搜索服务中经常使用的列创建索引,而不是为需要经常更新的表创建索引。3、尽量使用ID字段。一般来说,在数据表中使用“ID(身份)”字段作为主键有以下优点:首先,速度更快——可以在查询中使用简单的整数,而不是长字符串(longerstring)。显然,由于整数类型要短得多,因此执行时内存效率更高。其次,更安全——直接使用应用程序中的关键数据字段往往会出现很多问题。例如:如果使用姓名或地址作为主键,一旦用户更改了姓名、地址,甚至输入错别字,可能会混淆原来的对应关系。因此,为了加快查询速度,提高工作效率,请在每张数据表中添加一个Identity列,以便开发团队作为/sql_autoincrement.asp),以及合适的INT变量类型。4.默认避免NULL(空)值根据MySQL文档,NULL列需要额外的空间(参见--https://dev.mysql.com/doc/refman/8.0/en/data-size.html).因此,为了减少数据库对可用存储空间的占用,开发人员通常倾向于选择NOTNULL,这样可以更有效地利用索引,并且可以通过省去判断或测试每个索引是否为NULL来提高查询速度。值为NULL。如果您在数据库中使用虚拟主机,节省空间就更为重要。毕竟,即使是最好的虚拟机服务也不提供无限存储。虽然大大降低了存储设备和资源的购置成本,但如果您正在运营或打算成为拥有数千种产品的电子商务网站,那么节省存储资源是很有必要的。因此,通过使用NOTNULL,您将能够像使用任何变量一样使用字段,从而避免NULL引起的各种问题。5.对查询使用无缓冲模式你可以使用“无缓冲查询”(见--https://dev.mysql.com/doc/apis-php/en/apis-php-mysqlinfo.concepts.buffering.html),来节省查询所需的时间和内存。默认情况下,SQL查询使用缓冲模式。由于程序在查询完成后才会返回任何结果,并将处理结果存放在内存中,这样会无形中增加程序的等待时间,浪费内存资源。显然,如果查询的数量很大,而数据库本身也比较大,那么软件应用程序就需要大量的内存来缓冲查询。相反,对于无缓冲查询,在执行查询之前不会自动存储结果。检索到第一行后,您就可以开始使用它们了。值得注意的是,在处理结果集时,无缓冲查询不允许在同一连接上进行过多的进一步查询请求。6.让每一列更紧凑优化磁盘空间对于维持数据库引擎的正常运行至关重要。确保不影响性能的一种简单方法是使用小型、紧凑的色谱柱。为此,您应该始终选择对您的应用程序最实用的整数类型。例如:如果你知道目标数据表不会产生大量的行,那么请不要让数据系统自动使用INT作为主键(参见--https://www.w3schools.com/sql/sql_datatypes.asp)。您绝对可以从使用SMALLINT甚至TINYINT中获益。其实对于DATE和DATETIME也是一样的。如果您不需要时间部分,只需使用DATE。由于DATETIME在数据类型上占8个字节,而DATE只占3个字节,所以可以直接省5个字节。7.保持表静态(固定长度)另一个优化数据库性能的好方法是使用静态表。也就是说,数据表不应包含变长列,例如TEXT或BLOB。您可以使用CHAR、VARCHAR、BINARY和VARBINARY列,但需要填充它们以匹配指定的列宽。定长表不仅运行速度更快,而且更容易缓存。同时,静态表在崩溃后更安全、更容易重建。当然,在某些情况下,尤其是在使用CHAR和VARCHAR列时,静态表也可能比动态表需要更多的磁盘空间。这就需要你在性能提升和磁盘空间之间做一个权衡比较。8、安装Object-RelationalMapper(ORM)由于ORM可以为你处理大量的重复性任务,大大减少代码编写量,ORM可以帮助消除各种人为错误因素。同时,由于ORM可以及时清理查询,使得SQL注入更加困难,也可以提高系统的安全性。此外,ORM还将各种实体缓存在内存中,以减轻数据库和CPU的负载。当然,ORM并不完美,为了避免滥用ORM(见--https://dzone.com/articles/object-relational-mapping-pitfalls),你也可以使用一些性能调优,以及优化器类型的插件.9.批量运行DELETE和UPDATE在大数据表中,删除和更新数据通常作为同一个事务进行,因此这两个操作往往是复杂且耗时的。而一旦出现任何中断,我们回滚整个事务的时候会比较费时费力。如果您能够批量运行DELETE和UPDATE(请参阅-https://www.mssqltips.com/sqlservertip/5636/optimize-large-sql-server-insert-update-and-delete-processes-by-使用-batches/)可以通过增加并发和减少瓶颈来节省大量时间。例如:您可以一次删除和更新少量行,然后在将批处理提交到磁盘的同时执行其他类型的查询。这两者都可以让您减少执行回滚所需的时间。10.使用PROCEDUREANALYSE()获得更多提示最后一个优化数据库的做法是:使用数据库的内置函数--PROCEDUREANALYSE()。通过将其添加到SQL语句中,我们可以全面查看数据列并找到那些最优的数据类型和长度。将新数据导入对应的数据表后,我们可以及时检查现有表是否有不一致的地方。总结一般来说,数据库优化是一个漫长的调试过程,需要Web应用程序开发人员和测试人员的共同努力。希望以上的十条优化建议能为您手头的软件产品带来提升用户体验和资源管理的灵感和思路。原标题:Web开发者的10个数据库优化最佳实践,作者:KaarleVarkki
