我使用insert into cluase将一些记录(~10k)插入到临时表中。 我准备了一个选择,它将选择索引并表现更好。 但是当我使用相同的选择“插入cluase”时,它会导致表扫描。
我的查询看起来像这样
Insert into tmpio..table
select top 10000 Column_names
from Table
where <criteria>
如果我只检查SELECT查询的查询计划,我可以看到它选择索引,但对于包含“INSERT INTO”的整个查询,它不会选择任何索引。
这种行为是正常的吗? 当您从一个表中选择数据并将其直接插入另一个表时,索引是否无用?
这是我在编写查询之前的假设。
答案 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时,查询仍然完全执行,只有数据页在指定的行数受影响后才会停止。