Query

導出到 CSV 的訪問速度非常慢

  • October 24, 2011

我已經搜尋過,但找不到類似的東西。如果我只是執行查詢,我可以很快得到結果(約 5 分鐘);但是在我保存查詢以導出為 CSV 後,導出部分非常慢(> 30 分鐘)。

結果只有 3 列和大約 30 條記錄;我可以輕鬆複製並粘貼我得到的查詢結果。但是,我想了解這種奇怪的行為。這是一個大約 7GB 的巨大數據庫,這就是為什麼它被分成 4 個不同的文件。我不允許在工作中使用其他軟體,例如 POSTgreSQL 或 mySQL。無論如何,這是我的程式碼(修改了變數名):

SELECT var1, var2, count(*)
FROM (
SELECT var1,var2
   FROM [XXX10_2006-2010] INNER JOIN [XXXLong_2006-2010] 
       ON [XXX10_2006-2010].ID = [XXXLong_2006-2010].id
   WHERE [XXXLong_2006-2010].var4 = 'hamburger' 
       AND [XXXLong_2006-2010].cat1 = 'c'
       AND [XXXLong_2006-2010].cat2 BETWEEN 0 AND 96
       AND [XXX10_2006-2010].var5 = 'eggs'
UNION all 
SELECT var1,var2
   FROM [XXX10data_2001-2005] INNER JOIN [XXXLong_2001-2005] 
       ON [XXX10data_2001-2005].ID = [XXXLong_2001-2005].id
   WHERE [XXXLong_2001-2005].var4 = 'hamburger' 
       AND [XXXLong_2001-2005].cat1 = 'c'
       AND [XXXLong_2001-2005].cat2 BETWEEN 0 AND 96
       AND [XXX10data_2001-2005].var5 = 'eggs'
UNION all 
SELECT var1,var2
   FROM [XXX9_data_1997-2000] INNER JOIN [XXXLong_1997-2000] 
       ON [XXX9_data_1997-2000].ID = [XXXLong_1997-2000].id
   WHERE [XXXLong_1997-2000].var4 = 'hamburger' 
       AND ([XXXLong_1997-2000].cat1 ='1' AND [XXXLong_1997-2000].cat2 BETWEEN 40 AND 99)
       OR ([XXXLong_1997-2000].cat1 ='2' AND [XXXLong_1997-2000].cat2 BETWEEN 0 AND 39)
       AND [XXX9_data_1997-2000].var5 = 'eggs'
UNION all 
SELECT var1,var2
   FROM [XXX9_data_1993-1996] INNER JOIN [XXXLong_1993-1996] 
       ON [XXX9_data_1993-1996].ID = [XXXLong_1993-1996].id
   WHERE [XXXLong_1993-1996].var4 = 'hamburger' 
       AND ([XXXLong_1993-1996].cat1 ='1' AND [XXXLong_1993-1996].cat2 BETWEEN 40 AND 99)
       OR ([XXXLong_1993-1996].cat1 ='2' AND [XXXLong_1993-1996].cat2 BETWEEN 0 AND 39)
       AND [XXX9_data_1993-1996].var5 = 'eggs'
)
GROUP BY var1, var2

編輯:如果這一點細節有幫助:顯示導出文本嚮導需要 10 分鐘多一點,然後剩下的過程需要 20 分鐘左右。(雖然有時更長)

在我的腦海中,我可能認為這與擁有 4 個不同的數據庫文件和大型文件有關(不知道為什麼會這樣)。您能否輕鬆地將查詢範圍限定為 1 對 4 個 DB 文件以查看性能是否提高?

聽起來你有 I/O 問題。您是否嘗試將結果 CSV 保存在本地與網路位置?

引用自:https://dba.stackexchange.com/questions/7135