美好的一天,
根据标题, 是否可以在查询中动态强制使用某个索引?
我正在尝试做的示例:
- 我有一个名为#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?
除非使用该索引,否则查询将无法完成,并且我百分百确定的 inid 在需要运行的所有服务器中并不相同,尽管我没有检查,但也不能保证索引名字本身是一样的。 我有一个查询可以根据其列找到该索引,我可以保证列名始终相同。
提前致谢, ziv。
最佳答案
看来您在提供提示时必须使用硬编码索引名称。例如,如果月份列上的索引名为 month_index
那么以下内容将起作用:
insert into #Employees
select * from Employees (index month_index)
where Month between '2016-01-01' and '2016-12-31'
但如果您未指定索引,那么 Sybase 可能会使用您拥有的任何单个 inxex 作为默认值。
关于sql - Sybase 中是否可以动态强制使用索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924539/