2

我是试图优化 Sybase 查询的 SQL Server 开发人员。我正在尝试寻找非聚集索引,但它一直在进行扫描,只是想确认在 Sybase 中是否可以“寻找”如果是,如何实现非聚集索引寻找?

我有一个如下查询(* 实际上是大约 32 列)

SELECT t.* FROM dbo.g1_positions t WHERE t.source_date = (select max(source_date) from g1_positions)

我在表上有 3 个非聚集索引(无聚集索引),如下所示

  1. 列 entity_id、bgnref、retnum、source_date 上名为 primary_key 的索引
  2. 列 entity_id、source_date 上名为 idx_entdte 的索引
  3. bgnref、source_date 列上名为 idx_bgndte 的索引

内部查询(计算最大值对 idx_entdte 进行索引扫描),外部索引默认执行表扫描,如果我强制索引它执行索引扫描和一些额外的事情,由“使用 I/O 大小 2 KB 的数据”描述页。使用 MRU 缓冲区替换策略的数据页。”

我的猜测是这相当于我们在 SQL Server 中的“查找”。强制索引后,我看不到性能提升,我只是想知道我能做些什么来提高性能。

我无法对表进行任何更改,例如创建/删除/修改索引。

只是为了让您了解 SQL Server 工作中的查找。

假设我们有包含 4 条记录的 Employee 表。

在此处输入图像描述

如果查询在 Emp_id 上使用非集群索引,它将到达叶节点并获取实际数据将使用指针来读取堆上的实际数据(行)。这个使用指针的过程称为 LookUp

4

1 回答 1

1

这是可能的!

如果它不使用它应该是因为表扫描更好。那可能是因为统计数据关闭了!也更新它们。

如果需要,您可以强制使用索引,有关更多信息,请查看此示例

于 2012-08-17T10:14:03.683 回答