将 VARCHAR 与另一个 VARCHAR 进行比较的快速方法

发布于 2024-12-21 05:33:15 字数 217 浏览 2 评论 0原文

我在数据库中进行了迭代整个表的处理。在某些时候,我需要检查 VARCHAR 是否与列中的任何值匹配。

我想知道什么是快速的方法来做到这一点。每次都进行SQL比较吗?将表值检索到 VARCHAR 数组?另一个解决方案?

表中的迭代次数超过数百万次,因此将进行数百万次比较。在匹配表中,有几百个值。

那么,最好的方法是什么?

I have a processing in database that iterate over an entire table. At some point, I need to check if a VARCHAR matches any value in a column.

I want to know what is the fast way to do this. Do SQL comparison each time? Retrieve the table values to a VARCHAR array? Another solution?

The iteration in the table is over millions, so the comparison will be done million times. In the match table, there a few hundred values.

So, what is the best approach for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终难遇 2024-12-28 05:33:15

在小表的 varchar 列上有一个索引。那么查找将尽可能快。普通的 btree 索引(默认)对于相等运算符很有用。

CREATE INDEX smalltbl_lookup ON smalltbl(lookup);

如果您只查找某些值,这将是最快的方法:

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup)

导致索引搜索。如果您查找所有值(听起来不像您所做的那样),LEFT JOIN 会更快:

SELECT *
FROM bigtbl b
LEFT JOIN smalltbl s USING (lookup)

将小表中的值转换为数组并在那里进行检查无法与索引搜索竞争。

Have an index on the varchar column in the small table. Then the look-up will be as fast as possible. A plain btree index (default) is good for the equality operator.

CREATE INDEX smalltbl_lookup ON smalltbl(lookup);

If you only look up some values, this will be the fastest way:

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup)

Resulting in an index search. If you look up all values (does not sound like you do), a LEFT JOIN is faster:

SELECT *
FROM bigtbl b
LEFT JOIN smalltbl s USING (lookup)

Transforming the values from the small table into array and checking there cannot compete with an index search.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文