使用OR语句时的T-SQL索引

时间:2017-12-01 16:21:13

标签: tsql indexing

我查看了几个来源以获取有关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总是需要首先进行评估,但是我有多种方法可以处理它。我正在评估的潜在解决方案如下所示,但我不确定是否还有其他更好的解决方案。任何帮助将不胜感激!

  1. CREATE INDEX IND_index_name on table_name (field1) INCLUDING (field2, field3)
  2. CREATE INDEX IND_index_name on table_name (field1, field2, field3)
  3. CREATE INDEX IND_index_name1 on table_name (field1, field2) CREATE INDEX IND_index_name2 on table_name (field1, field3)
  4. 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)
  5. 作为附加信息,我无法访问SQL Server Management Studio工具,因为我使用的是DBeaver。为了这个例子,我们假设在没有索引的情况下运行几乎需要一整个工作日。这里提交的答案将用于处理更大的更复杂的查询,其中来自 table_name 的数据将用于上面显示的查询之后运行的几个后续查询。

1 个答案:

答案 0 :(得分:0)

没有一种方法可以将OR

编入索引

我会尝试3个单独的索引