我認爲使用CLR觸發器而不是傳統的T-SQL觸發器是因爲我需要使用已經在C#中實現的一些邏輯。我知道SQL服務器支持CLR集成,在我看來,這似乎是一個值得一試的解決方案。CLR觸發器狀態
但是,我想要執行的操作可能有點慢。速度不夠慢,無法完全排除在觸發操作中使用它們,但插入數十萬條記錄時可能明顯緩慢。最慢的部分可以從緩存中受益很大,我猜想緩存未命中和成千上萬的緩存命中會很少。在這一點上,所有的問題都會導致一個問題:CLR觸發器可以有任何狀態嗎?而且,更重要的是,這個國家的生命週期是什麼?我想我可以使用觸發器類的靜態字段來保存某些狀態,但我不知道它何時被初始化(當服務器啓動時?在事務啓動時?未指定?)。我不確定它是否是安全的路線,因此詢問在CLR觸發器中使用某些狀態的常見做法是什麼(如果有的話)。爲了避免混淆:我需要緩存CLR對象,而不是一些SQL查詢的結果,所以它不是關於SQL Server本身在緩存方面有多好,我想緩存一些不屬於數據庫。另外,我認爲CLR並不是因爲我無法在T-SQL中進行字符串操作和綁定檢查。我需要執行一些在CLR類庫中實現的邏輯,並且有很多依賴關係。在這種情況下,我應該使用觸發器是另一個與這個觸發器幾乎沒有關係的問題。
非常感謝提前。
PS:我會欣賞任何關於主題的評論和見解,甚至那些不直接回答我的問題的人,但請不要一概而論「觸發器是邪惡的,不應該被使用「和」CLR整合緩慢且主要相容性疼痛「。另外,我知道它可能會向某人尖叫「不成熟的優化」,但此刻我只想知道我的優化選項是怎麼回事,因爲我不熟悉SQL Server中的CLR集成。我不會優化它,除非分析結果表明如此,但我不想實現整個事情來認識它太慢,我無能爲力。
我使用SQL Server 2008和.NET 3.5。
緩存在內存中?這是SQL Server已經擅長的事情之一。 – 2011-06-14 09:50:31
@米奇小麥:請你詳細說明一下嗎? – Dyppl 2011-06-14 09:51:52
對於正確配置和配置好的SQL Server上的大多數數據庫,80%的「熱」頁面將從RAM提供,而不是文件系統(大型數據庫除外)。如果情況並非如此,你還有其他問題...(不是我的失望BTW) – 2011-06-14 09:53:59