【问题标题】:Does Sybase have a index seek operation (like SQL Server) in exection plan?Sybase 在执行计划中是否有索引查找操作(如 SQL Server)?
【发布时间】:2012-08-13 18:51:55
【问题描述】:

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

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

选择 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 上进行索引扫描),默认情况下外部索引进行表扫描,如果我强制索引它进行索引扫描和一些额外的事情,由 “对数据页使用 2 KB 的 I/O 大小。 数据页的 MRU 缓冲区替换策略。 "

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

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

只是为了说明 SQL Server 工作中的查找。

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

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

【问题讨论】:

  • 你希望它寻找什么?索引将 source_date 作为第二列或第四列。
  • 同意,如果没有以source_date 作为第一列的索引,引擎将无法搜索任何内容。
  • @ta.speot.is 可以做些别的事情来提高查询的性能。
  • @Paciv 还有其他提高查询性能的技巧吗?
  • 你可以在 source_date 上放一个索引

标签: sql-server sap-ase seek non-clustered-index


【解决方案1】:

有可能!

如果它不使用它应该是因为表扫描更好。 那可能是因为统计数据关闭了! Update them as well.

如果需要,您可以强制使用索引,更多信息请查看this example

【讨论】:

  • 当我强制索引时,它正在执行“非集群索引扫描”。我已经编辑了问题来解释我的情况。
  • @Pritesh 我是一个 Sybase 人,你能解释一下在 sql server 上查找是如何工作的吗?
  • 为问题添加了查找详细信息。请看一看。
  • 非集群(以及集群)索引执行您在图像中描述的操作。您是否更新了统计信息?
  • 集群中的数据(记录)本身至少在SQL Server的叶子节点上就是这样!所以不需要在集群索引中查找。如果我更新统计信息,仍然会发生非集群索引扫描?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 2021-07-20
  • 1970-01-01
  • 2023-03-12
  • 2010-11-11
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多