2011-03-18 22 views
1

如何爲每天一次運行一次,每月運行一次或少量運行的報告編寫SQL查詢與爲每天運行多次的web應用程序(或應用程序)編寫查詢有什麼不同?如果查詢一個月只運行一次,速度和性能不是一個大問題,對嗎?如何更頻繁地使用SQL的方面(臨時表,CTE等)?如何爲報表編寫SQL查詢不同?

回答

6

他們不是不同與其他任何的查詢採取了同樣的考慮也適用。

無論速度和性能是一個問題,是不是你的決定,但該報告的用戶。

如果您的每月報表查詢需要3個小時,在這個過程中堵塞幾個表,並把你的其他應用程序停頓下來,因爲他們沒有與他們接觸,會發生什麼?

+0

作爲俄德指出,在很多情況下,你會發現你的「每月一次」報告需要更加微調比你的「機應用」查詢的休息,因爲這將是你的最終用戶可能並不需要的物品每一天,但他們將很可能是非常重要的。 – Patrick 2011-03-18 13:44:37

+0

對於來自激烈活躍系統的大量數據的不頻繁報告往往會導致數據倉庫解決方案。如果需要花費數分鐘(更不用說數小時)來查詢所有表格,但在報表運行時表格正在使用新的交易進行更新,那麼您*可能會遇到必須鎖定系統和/或無法工作的問題生成相同的報告兩次。從單個時間點複製所有數據的其他位置(倉庫)的數據,並且可以生成不影響交易系統的一致性報告。 – 2011-03-18 13:50:07

2

速度和性能往往是報告中的一個更大的問題。您的平均CRUD SQL影響通常隻影響應用程序中的一條記錄,搜索可能會佔用更多,但通常結果僅限於一定數量的行。

的報告可能需要從數百萬條記錄,並用20-30加入彙總數據。寫入不當可能會極大地降低系統速度,當然,如果用戶需要等待10個小時才能獲得他們要求的報告,用戶會變得非常暴躁。它也可能導致阻塞。然後你就會遇到髒讀的問題,這可能會在報告中引發更多的問題。有一個原因是爲什麼數據經常被倉庫用於報告,通常是爲了提高性能並不讓報告妨礙用戶進行交易工作。

報表編寫查詢往往是更爲複雜,更難進行性能調整(由於複雜性),比幾乎任何SQL擊球未產生某種形式報告的Web應用程序。我看到超過500行的報表查詢。