gpt4 book ai didi

postgresql - Postgresql 中的文本相等运算符性能

转载 作者:行者123 更新时间:2023-11-29 13:22:19 26 4
gpt4 key购买 nike

这个查询在字符串比较性能方面是如何工作的(假设在 last_name 上有一个标准的 B 树索引?

select * from employee where last_name = 'Wolfeschlegelsteinhausenbergerdorff';

所以当它遍历 B 树时,我假设它不会对 last_name 字段中的每个字符进行线性搜索。 EG,它不会开始检查第一个字母是否以 W 开头...假设它不进行线性比较,它会做什么?

我问是因为我正在考虑编写自己的重复预防机制,但我希望性能良好。我最初想对通过 API 传入的每个字符串进行哈希处理(转换为某种原始数据类型,可能是 Long),并将哈希码存储在集合/缓存中(每个条目在 5 分钟后过期)。任何冲突都会/可能会提示真正的重复检查,其中已处理的字符串存储在 postgresql 中。但我在想,只是简单地查询 postgresql 会更好,而不是维护我自己的基于内存的哈希集,它会在 5-10 分钟后刷新旧条目。我可能会使用 redis 来实现可伸缩性,因为多个节点将读取不同的流。我的内存缓存哈希码集是否会比仅查询索引的 postgres 字符串列(全文匹配而不是文本搜索)更快?

最佳答案

当比较字符串是否相等时,函数 texteq 被调用。

如果你查找src/backend/utils/adt/varlena.c中的函数,你会发现比较是使用C库函数memcmp .我怀疑你能比这更快。

当您在 B 树索引中查找值时,会将其与存储在从根页到叶页的每个索引页中的值进行比较,最多 5 或 6 页。

坦率地说,我怀疑你能否比这更快,但我祝你好运。

关于postgresql - Postgresql 中的文本相等运算符性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com