如何获得与OR语句一起使用的索引

时间:2018-08-30 05:58:41

标签: sql firebird

我有带有用户传递的参数的SQL。用户可以传递一些id或-1,这表示“没关系”。 可以像下面这样编写查询,但是可以使用索引吗?

SELECT *
FROM table
WHERE
    ((col1 = :param1) OR (:param1 = -1))
    AND ((col2 = :param2) OR (:param2 = -1))
    AND col3 STARTING 'A'

col1col2col3被索引。在FB 2.x中,使用OR切勿对col1或col2使用索引。在FB 3中,仅当存在可以使用索引的第一个(或第二个)条件时(PLAN索引和自然条件),而在最后一个条件下,停止对col1 / 2使用索引。

如何在不使用PLAN的情况下编写SQL,如何为col1/2使用索引,并通过传递-1保持“关闭”状态的可能性?

1 个答案:

答案 0 :(得分:0)

您可以重写类似条件

(col1 = :param1) OR (:param1 = -1)

col1 = case when :param1 = -1 then col1 else :param1 end

由于它是单个表达式,因此您也可以安全地删除所有方括号,这使查询更易于阅读。