很多关于数据库的知识。它们是复杂的关键任务应用程序,有时需要专业的主题专家来维护它们,但这并不意味着它们也是某种神奇的黑匣子。数据库是我们应用程序的支柱,您对它们的工作方式了解得越多,您就越能更好地使用它们、针对它们编写应用程序以及在不可避免地出现问题时解决问题。
因此,让我们深入探讨您应该(可能)了解的有关数据库的七件事。
注意:除非特别说明,否则我通常会讨论 PostgreSQL 或 MySQL 等关系数据库,而不是 NoSQL 数据库。
6. 索引就像魔法,直到它们不是
索引可以说是数据库最重要的方面之一,但它们往往是最容易被忽视的方面之一。索引,简单地说,就是查找数据时数据库的目录。不必扫描整个列查找单个值,索引可以告诉它该值的位置,以便数据库引擎可以立即跳转到它。
如果您正在阅读本文并对自己说,“嘿,这听起来像一个哈希表”,那么,您没有错。索引基本上是表中给定列的一种哈希表。大多数关系数据库会自动在主键上创建索引,但您可以根据需要向任意数量的列添加索引。
但请不要这样做。
虽然索引可以显着加快读取速度——尤其是在大型数据集中——但它们在将数据写入表时需要权衡。每次更新表时,该表上的索引也需要更新,这会为每个写入事务增加额外的时间。这是因为索引实际上是什么。不像一本书的目录只是一个指针列表,索引实际上包含了以不同顺序存储的必要列的第二个副本。这意味着索引使用成比例的磁盘空间并在更新时需要 I/O。当只处理一个表上的几个索引时,权衡通常可以忽略不计,但如果超过几个,您的事务就会开始招致必须在每个事务上更新所有这些索引的写入损失。
这就是为什么在何时何地使用索引的策略很重要。决定是否为列建立索引的最佳方法是仔细查看您的应用程序,查看最常使用的查询类型,并以此为基础做出决定。此外,应用程序性能监控或数据库监控等工具可以通过跟踪各种数据库查询的事务时间来帮助发现可能通过添加索引而改进的任何查询。
加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com