我有一个存储桶的表,我想从该表中查询多个值。 这是一个示例:
SELECT *
FROM my_bucketed_table
WHERE bucketed_column IN (value1, value2)
结果是对表进行全面扫描,而不是使用索引。
当我使用并集一次查询每个值时,就扫描数据而言,它按预期工作:
SELECT *
FROM my_bucketed_table
WHERE bucketed_column = value1
UNION
SELECT *
FROM my_bucketed_table
WHERE bucketed_column = value2
但是我希望列表是动态的,所以这种解决方案对我来说还不够好。
我希望使用IN运算符或另一个表的JOIN扫描的数据与UNION解决方案中的数据相同
答案 0 :(得分:2)
发表评论的时间有点长。
我认为您指的是分区修剪,它与“使用索引”有点不同。您希望查询仅读取相关分区。
分区修剪非常棘手。基本问题是查询在开始执行查询之前需要知道要读取哪些数据。通常,这需要在分区列上进行显式比较。
标识正确的分区应该与=
,>
,>=
,<
和<=
一起正常工作。使用in
和not in
可能会变得更加复杂。当您在一个表上使用join
并且未在联接中显式包括两个表的分区时,它可能无法工作。
答案 1 :(得分:0)
您可以尝试如下所示,这可能有助于使用索引
SELECT *
FROM my_bucketed_table
WHERE bucketed_column = 0000 or bucketed_column IN (value1, value2)
假设您的列中没有任何值0000