2013-01-03 50 views
0

我使用SYBASE ASE性能问题,当您尝试插入下面的代码表或临时表使用TOP N查询执行得非常厉害子句没有那么重要......重要的是,SELECT查询自己运行在一瞬间,但只要你尝试将它插入到表中,就需要2分钟!SQL(SYBASE)当插入到表

查看查询计划,优化器似乎没有考虑到估计的行应该是100并且执行TableB的表扫描。它自己的select语句似乎在考虑TOP 100时提供了一个合理的计划,但插入似乎使优化器采取了非常低效的路线。已经尝试了许多排列这个查询,并无济于事。表A和B非常大,TOP N是必须的。也试过设置rowcount 100和相同的结果。

任何人都可以为此提出解决方法吗?

感谢

回答

0

你试过:

INSERT INTO #temp (Id) 
SELECT * FROM 
(
    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 
) 

它会产生略微不同的执行计划。

+1

是的尝试类似的东西,但它并没有真正有所作为。另外,您不能在SYBASE ASE的派生表中实际使用ORDER BY。 –

0

为什么不试试这个,看看你是否还有问题。从技术上讲,如果select语句本身很快,insert into也应该相当快。

--INSERT INTO #temp (Id) 
SELECT TOP 100 a.Id 
INTO #temp 
FROM TableA a 
INNER JOIN TableB b ON a.Id = b.Id 
WHERE a.SomeColumn = 'blah' and b.SomeColumn = 'Blah' 
ORDER BY a.Id