当前位置: 首页 > 面试题库 >

仅对一个匹配项之间的查询建立索引SQL?

龚钧
2023-03-14
问题内容

我们有一个包含两百万行的表,其中对它的所有查询将是使用Column1和进行之间的查询Column2。同样,将只有一种可能的结果。例如…

Col1     Col2
1        5
6        10
11       15

select * from table1 where 8 between Col1 and Col2

我目前在Col1和上都有一个唯一的聚集索引Col2。到目前为止,我还无法弄清楚如何进一步优化查询和索引,以最大程度地减少所处理的行。执行计划当前报告在查找一个唯一的正确答案时处理了将近0.5行和113k行的成本。

我可能会忽略哪些选择?

根据要求,当前执行计划中的一些详细信息:

Operation
 Clustered Index Seek
Predicate
 CONVERT_IMPLICIT(bigint,[@2],0)<=[Col2]
Seek Predicate
 Seek Keys[1]: End: Col1 <= Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))

问题答案:

我想我找到了答案。我必须首先在Col1上创建一个唯一的聚集索引,然后在Col2上创建一个唯一的非聚集索引。然后必须更新查询以在每个索引上强制查找。

select * from table1 where Col1 = 
    (select max(Col1) from table1 where Col1 <= 8)
and Col2 = 
    (select min(Col2) from table1 where Col2 >= 8)

执行计划现在报告0.0098成本并处理了1行。



 类似资料:
  • 问题内容: 我有多个带有字符串值的数组,我想比较它们,只保留 所有 它们之间相同的匹配结果。 给出以下示例代码: 我想产生以下数组,其中包含来自所有给定数组的匹配项: 我知道我可以将所有数组组合在一起,但这只是给我一个包含所有内容以及重复项的数组。是否可以轻松完成此操作而无需诸如underscore.js之类的库的开销? 编辑 我想我应该提到的是,可能存在未知数量的数组,我只是以3为例。 问题答案

  • 我有多个带有字符串值的数组,我想对它们进行比较,并且只保留它们之间相同的匹配结果。 给定此示例代码: 我想生成以下数组,它包含所有给定数组的匹配项: 编辑我想我应该提到可能有未知数量的数组,我只是使用3作为一个例子。

  • 问题内容: 我在对象上创建索引,并希望既可以进行完整短语搜索也可以进行部分匹配。该类型称为“发送方”,简化的索引创建如下所示: 这样做的目的是对“名称”字段中的值建立索引两次:一次是不拆分字段中的各个单词(name.full),一次是拆分单词(name.name)。 我有一个已建立索引的文档,其名称字段设置为“ Danny Watson博士”。我希望在执行术语查询(根据文档未分析其查询字符串)时发

  • 问题内容: 如果我有一个看起来像这样的表: 还有一个THINGS表,如下所示: 我正在尝试提出一个纯SQL查询,该查询可以让我找出什么可以访问什么。基本上,我想要一个看起来像这样的查询: 并返回“ John”和“ Mary”。关键是访问事物所需的许可数量是任意的。 我觉得这应该很明显,但是我无法提出一个优雅的解决方案。首选与Oracle兼容的解决方案。 编辑: Kosta和JBrooks的解决方案

  • 问题内容: 我有两个numpy数组A和B。A包含唯一值,而B是A的子数组。 例如: 问题答案: 您可以使用带有- 如果您关心维护订单,也可以使用- 对于一般情况,当&是未排序的数组时,您可以在中引入选项,就像这样- 为了解决一般情况,我还会添加我最喜欢的内容- 样品运行-

  • 问题内容: 我想将唯一索引放在表中的两个(或更多)列上,但是我得到“找到重复的键”。如何选择那些导致重复的行? 问题答案: 您可以为此使用和: 基本上-将值分组,然后过滤不止一个的实例。