我是试图优化 Sybase 查询的 SQL Server 开发人员。我正在尝试寻找非聚集索引,但它一直在进行扫描,只是想确认在 Sybase 中是否可以“寻找”如果是,如何实现非聚集索引寻找?
我有一个如下查询(* 实际上是大约 32 列)
SELECT t.* FROM dbo.g1_positions t WHERE t.source_date = (select max(source_date) from g1_positions)
我在表上有 3 个非聚集索引(无聚集索引),如下所示
- 列 entity_id、bgnref、retnum、source_date 上名为 primary_key 的索引
- 列 entity_id、source_date 上名为 idx_entdte 的索引
- bgnref、source_date 列上名为 idx_bgndte 的索引
内部查询(计算最大值对 idx_entdte 进行索引扫描),外部索引默认执行表扫描,如果我强制索引它执行索引扫描和一些额外的事情,由“使用 I/O 大小 2 KB 的数据”描述页。使用 MRU 缓冲区替换策略的数据页。”
我的猜测是这相当于我们在 SQL Server 中的“查找”。强制索引后,我看不到性能提升,我只是想知道我能做些什么来提高性能。
我无法对表进行任何更改,例如创建/删除/修改索引。
只是为了让您了解 SQL Server 工作中的查找。
假设我们有包含 4 条记录的 Employee 表。
如果查询在 Emp_id 上使用非集群索引,它将到达叶节点并获取实际数据将使用指针来读取堆上的实际数据(行)。这个使用指针的过程称为 LookUp