原文英文,约1100词,阅读约需4分钟。
📝
内容提要
最近参加了PGConf.dev的演讲,讨论了排序规则的选择。演讲强调了避免使用默认的排序规则提供程序以提高性能。作者进行了一系列测试,比较了不同排序规则提供程序在不同情况下的性能影响。
🔎
延伸解读
测试结果概览
在六项测试中,libc/C 在五项中表现最佳,仅在带索引的范围查询中略慢于 libc/C.UTF-8,差距约 3.5%。libc/en_US 在多数场景下性能最差,例如创建索引时比 libc/C 慢近 196%。内置的 C/C.UTF-8 提供程序并未如预期般快速,在顺序扫描中比 libc/C 慢超过 20%。
性能差异的实践启示
对于标识符、slug 等无需遵循人类语言排序规则的列,切换到 C 排序规则可带来显著性能提升。但作者强调,C 排序规则并不适用于所有场景,因为许多业务需要符合人类直觉的排序。因此,不应盲目将所有数据库切换为 C,而应根据实际需求权衡。
默认设置的潜在代价
许多数据库默认使用 libc/en_US 排序规则,但测试表明它在大多数情况下性能最差。这意味着如果未特别配置,可能正在承受不必要的性能损失。读者应检查现有数据库的排序规则设置,评估是否可以通过调整来优化性能。
❓
Q&A
使用默认排序规则会影响性能吗?
是的,使用默认排序规则会导致性能损失,建议避免使用。
PostgreSQL 17支持哪些排序规则提供程序?
PostgreSQL 17支持libc、icu和内置排序规则提供程序。
libc排序规则在性能测试中表现如何?
libc排序规则在大多数情况下表现最佳,提供了显著的性能提升。
内置的C/C.UTF-8排序规则表现如何?
内置的C/C.UTF-8排序规则在性能上表现不佳,尤其是在顺序扫描测试中。
在什么情况下使用C排序规则是合理的?
在处理标识符、slug等不需要人类可读顺序的情况下,使用C排序规则可以提高性能。
测试中哪个排序规则的性能最差?
大多数情况下,libc/en_US排序规则的性能最差。
🏷️