我查看了几个来源以获取有关AND语句,表连接等索引的信息,但是当存在OR语句时,我还没有找到很多有用的信息。那就是说有人会如何理想地为这种情况创建索引?
更新了SQL语句以不使用like
。
SELECT *
FROM table_name
WHERE table_name.field1 = 'criteria'
and (table_name.field2 = 1 or
table_name.field3 = 0)
显然,我想为field1
创建一个索引。但是我是include
字段2和3还是以另一种方式处理这个问题,我不确定。如果这是一个简单的三部分AND语句,我可能会使用CREATE INDEX IND_index_name on table_name (field1, field2, field3)
但我有理由相信这个逻辑对于OR语句不起作用。基于给出的语句,我可以假设field1总是需要首先进行评估,但是我有多种方法可以处理它。我正在评估的潜在解决方案如下所示,但我不确定是否还有其他更好的解决方案。任何帮助将不胜感激!
CREATE INDEX IND_index_name on table_name (field1) INCLUDING (field2, field3)
CREATE INDEX IND_index_name on table_name (field1, field2, field3)
CREATE INDEX IND_index_name1 on table_name (field1, field2)
CREATE INDEX IND_index_name2 on table_name (field1, field3)
CREATE INDEX IND_index_name1 on table_name (field1)
CREATE INDEX IND_index_name2 on table_name (field2)
CREATE INDEX IND_index_name3 on table_name (field3)
作为附加信息,我无法访问SQL Server Management Studio工具,因为我使用的是DBeaver。为了这个例子,我们假设在没有索引的情况下运行几乎需要一整个工作日。这里提交的答案将用于处理更大的更复杂的查询,其中来自 table_name
的数据将用于上面显示的查询之后运行的几个后续查询。
答案 0 :(得分:0)
没有一种方法可以将OR
编入索引我会尝试3个单独的索引