我正在测试一个 Ingres Vectorwise 数据库,试图找到一种更快的方法来运行查询,因为我们在文本查找方面遇到了一些缓慢。
如果我基于 char() 列查找大约 5000 个项目,则下面的实现 #1 非常快。不幸的是,查找 50 项所需的时间与查找 5000 项所需的时间大致相同。
另一方面,实现#2 对于 50 个项目非常快,但对于 5000 个项目根本无法扩展。
实施#3 显然会比#1 更糟糕,但我只是提供了我尝试过的示例。
我的问题是:假设我的表只有两列,q = bigint, r = char() 字段,你能想到任何其他方法来使用基本 SQL 编写这个查询,以便我可以有更多的选择吗?我希望有一个选项可以合理地执行 50 和 5000(可以像您在数据库中所期望的那样扩展)。
请注意,我将接受执行相同功能的替代查询的任何答案;越多越好。我不希望任何人会以我希望的方式扩展,但我不会知道,直到我尝试更多。
实施#1:
select q
from test_table
where r in ('a', 'b', 'c', 'd', 'e')
实施#2:
select q
from test_table
where r = 'a' or r = 'b' or r = 'c' or r ='d' or r = 'e'
实施#3:
select q
from test_table a
where exists (
select r
from testtable
where r in ('a', 'b', 'c', 'd', 'e')
and a.r = r)