sybase 15.5中的“Insert Into”子句

时间:2014-01-02 07:35:52

标签: insert sybase sybase-ase

我使用insert into cluase将一些记录(~10k)插入到临时表中。 我准备了一个选择,它将选择索引并表现更好。 但是当我使用相同的选择“插入cluase”时,它会导致表扫描。

我的查询看起来像这样

Insert into tmpio..table
select top 10000 Column_names
from Table
where <criteria>

如果我只检查SELECT查询的查询计划,我可以看到它选择索引,但对于包含“INSERT INTO”的整个查询,它不会选择任何索引。

这种行为是正常的吗? 当您从一个表中选择数据并将其直接插入另一个表时,索引是否无用?

这是我在编写查询之前的假设。

  1. 目标表不应包含任何提高性能的索引。
  2. 源表可以有索引,我们可以使用它们。

1 个答案:

答案 0 :(得分:0)

看起来Sybase不会以某种方式匹配索引。 它可能是“前10000名”搞砸了。

如果您知道要使用的索引,可以通过输入以下命令强制sybase使用它:

select top 10000 Column_names from Table (index index_name)

除了您的解决方案,您可能应该考虑使用“select * into”方法。它更快,更有效,因为它不会使用事务日志。

select top 10000 Column_names into tmpio..table
from Table
where <criteria>

的PS。

注意:当使用select top N时,查询仍然完全执行,只有数据页在指定的行数受影响后才会停止。