【发布时间】:2020-08-09 23:56:55
【问题描述】:
在 sybase 过程中,我看到如下 SQL 查询
select max(mycolumn) from mytable (2) where id = @param1
(2) 是什么意思
如果我想为 oracle 过程重写这个 SQL,我该怎么做
【问题讨论】:
在 sybase 过程中,我看到如下 SQL 查询
select max(mycolumn) from mytable (2) where id = @param1
(2) 是什么意思
如果我想为 oracle 过程重写这个 SQL,我该怎么做
【问题讨论】:
假设这是 Sybase ASE ...<table_name> (X) 是一个索引提示,表示要使用索引 id = X (sysindexes.indid=X) 的索引(在表 <table_name> 上)。在您的示例中,提示说要使用带有indid=2 的索引。
如果没有带有indid=2 的索引,那么优化器将忽略此提示并继续尝试确定要使用的(如果有的话)索引。
要迁移到 Oracle(或任何其他 RDBMS),只需删除 (2)。
虽然 ASE 显然支持此功能,但使用它并不是一个好主意,除非您 100% 确定所需的索引将始终具有 indid=2。随着时间的推移,随着索引(包括支持 PK/UNIQ 约束的索引)的添加/删除,分配给特定索引的 indid 可能会发生变化;您最不想做的事情(从性能角度来看)是强制使用错误的索引(即,indid=2 不再引用 SQL 开发人员想要使用的任何索引)。
【讨论】: