数据库 Auto Increment 的实际问题
本文中,我将展示我以后将在 Postgres 和 MySQL 中避免使用 auto-increment 自增长字段的两个原因。我更愿意使用 UUID 字段除非有非常好的不使用的理由。 MySQL 8.0 auto-increment ID 重用 如果运行的是旧版本的MySQL,那么自动递增的ID可能会被重复使用。让我们看看这个动作..
SQL 性能优化:慢索引-2
前面章节介绍了如何通过修改现有字段的索引顺序获得好处,不过这一示例考量的只有两个 SQL 语句。然而,修改索引可能影响所索引的表的所有查询。本文解释了数据库如何选择索引并演示了修改现有索引可能产生的副作用
SQL性能解析:Where 语句
前文描述了索引的结构,并解释了索引性能不佳的起因。下一步,我们来学习如何在 SQL 语句中发现和避免这些问题。我们从 where 语句开始吧。where 子句定义了 SQL 语句的查询条件,因此属于索引的核心功能领域:快速查找数据。虽然 where 子句在性能上有巨大的影响,语法经常上不太小心而导致数据库不得不扫描索引的很大部分。其结果是:写得不好的wher...
SQL 性能解析:SQL慢索引 -1
尽管有树遍历的效率,还是存在索引搜索不如预期那样快的情况。长期以来,这种矛盾助长了“未生成索引”的神话。这个神话将重建索引作为神奇的解决方案。<神话篇>对这一神话和其他神话做了更详细的描述。目前,您可以理所当然地认为,从长远来看,重建索引并不能提高性能。即使在使用索引时,琐碎语句也可能很慢的真正原因可以在前面的部分的基础上解释。慢索引查询的第一个...
SQL 性能解析:SQL 索引解析
“索引使查询更快”是我见过的对索引最基础的解释。虽然这句话对索引最重要的一面做了很好的解释,但不幸的是,还不够充分。本文将以不那么粗浅的,也没那么深入细节的方式描述索引结构。它只是为理解SQL性能方面提供了足够视野。索引是数据库中的一个独特的结构,使用 create index 语句创建。它需要自己的硬盘空间,并持有一份索引的表格数据的副本。这意味着索引是纯...
Laravel 中如何在数据库事务中延迟队列及事件监听器
如果在数据库事务期间触发了队列或监听,可能会因为数据回滚而导致数据不一致。本文将介绍如何妥善处理。Laravel 开发者可能会碰到这么一个问题:在数据库事务期间触发了队列或事件监听。这一问题可能导致 ModelNotFoundException、数据不一致以及其他一些可能影响应用可靠性的问题。本文将说明数据库事务为什么重要、使用时会碰到哪些常见问题以及如何在...
PostgreSQL: 详解索引 Include 子句
有些数据库 —— 比如 Microsoft SQL Server、IBM Db2 及发行版11之后的PostgreSQL —— 在创建索引语句时都支持 include 子句。PostgreSQL 引入这个特性是促使我发这篇长文解释 include 条件的直接原因。深入细节之前,我们先回顾一些(非聚簇)B-树的索引是如何工作的以及全能的index-only s...
etcd:一款 Go 语言编写的高可用分布式键值数据库
etcd 是一个分布式的、高可用的、一致性的 key-value 键值存储数据库,基于 Go 语言实现,主要用于共享配置和服务发现。
ULID vs UUID:为什么 ULID 更适合在分布式系统中使用?
在分布式系统中,唯一标识符(UUID)是非常常见的,它是用于标识数据或者实体的一种方式,它是基于算法生成的一个固定长度的字符串。然而,UUID 也有一些缺点,例如它们很难被排序,因为它们是随机生成的,这导致了一些性能问题。而 ULID 则是一种新的方案,它解决了这些问题并提供了一些额外的优势。什么是 ULID?ULID(Universally Unique Lexi...
MySQL 全文检索
MySQL 支持使用 LIKE 运算符和正则表达式进行文本搜索。但是,当 text 列很大并且表中的行数增加时,使用这些方法有一些限制:性能:MySQL 必须扫描整个表,以根据 LIKE;正则表达式中的语句或模式中的模式查找确切的文本。灵活的搜索:通过 LIKE 运算符和正则表达式搜索,很难有灵活的搜索查询,例如,查找描述中包含