2013-01-03 49 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