当您尝试将以下代码插入表或临时表时,我在使用 SYBASE ASE 时遇到了性能问题:
INSERT INTO #temp (Id)
SELECT TOP 100 a.Id
FROM TableA a
INNER JOIN TableB b ON a.Id = b.Id
WHERE a.SomeColumn = 'blah' and b.SomeColumn = 'Blah'
ORDER BY a.Id
WHERE 子句并不那么重要……重要的是 SELECT 查询会在瞬间自行运行,但是一旦您尝试将其插入表中,就需要 2 分钟!!!!
查看查询计划,优化器似乎没有考虑到估计的行数应该是 100,而是对 TableB 进行了表扫描。其自身的 select 语句似乎呈现了一个明智的计划,其中考虑了 TOP 100,但插入似乎使优化器采取了一条非常低效的路线。已尝试对此查询进行许多排列但无济于事。表A和B非常大,TOP N是必须的。也尝试过设置 rowcount 100 和相同的结果。
任何人都可以建议解决这个问题吗?
谢谢