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

标签 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?

除非使用该索引,否则查询将无法完成,并且我百分百确定的 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/

相关文章:

sql - 获取 Sybase 中本周的开始和结束日期

sql - 有没有办法以原子方式执行 SQL 合并?

mysql - 搜索满足 Column1 <= X <= Column2 的行的 SQL 查询非常慢

sql - 选择 bigquery 中除一列以外的所有列

date - 使 sybase 中的列默认为行插入的当前日期/时间

excel - copyfromrecordset 返回空白列

sql - 使用另一个表中的数据创建 SQL 表

mysql - 在 MySQL 中合并两个 UPDATE 语句

sql-server - 为什么 SQL Server DATETIME 类型以 1/300 秒的滴答声来节省时间?

sql - 来自单个表的选择查询中的性能问题