是否可以在 Sybase 中动态强制使用索引?

Is it possible to dynamically force index usage in Sybase?

美好的一天,

根据标题, 是否可以在查询中动态强制使用某个索引?

我正在尝试做的事情的例子:

*Table:

EmployeeID(numeric) | EmployeeName(varchar) | Month(datetime) | Sallary(int)

查询:

insert into #Employees 
select * from Employees (index @index)
where Month between 'Jan' and 'Dec'

对于这段代码,Sybase 只是说@index 附近有一个错误。

Q1: Can I do this?  
Q2: If so, how? 
Q3: If not, is there anything else I can do?

除非使用该索引,否则查询将不会完成,而且我 100% 确定的 inid 在需要 运行 的所有服务器中都不相同,虽然我没有检查,但那里也不保证索引名称本身是相同的。 我有一个查询可以根据它的列找到这个索引,我可以保证列名永远是相同的。

提前致谢, ziv.

看来您在提供提示时必须使用硬编码的索引名称。例如,如果月份列上的索引被称为 month_index,则以下内容将起作用:

insert into #Employees 
select * from Employees (index month_index)
where Month between '2016-01-01' and '2016-12-31'

但是,如果您不指定索引,那么 Sybase 可能会使用您拥有的任何单个索引作为默认值。