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

时间:2016-12-02 03:57:29

标签: sql sybase

美好的一天,

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

我尝试做的例子:

  • 我有一个名为#Employees的临时表
  • 此表尚未设置索引。
  • 有一个名为Employees
  • 的非临时表
  • 这个非临时表在"月"上有一个索引。列。
  • 这是我的环境的简化,主要源于Sybase决定不使用索引,除非我强迫它。
  • @index已被前一代码设置为inid或精确索引名称。我试过了两个。

  • 不允许更改非临时表。

*表:

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。

1 个答案:

答案 0 :(得分:0)

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

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

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