ReadUncommitted - 應用

它允許「髒讀 (dirty read)」,即能讀到尚未 commit 的資料,讀取過程也不會對任何資料加 lock(不會阻塞其他 transaction)。在高併發的電商場景中,這確實可以用來提升查詢效能,但只能用在「對準確性要求不高」的情境
- 查詢只讀、不影響交易邏輯
- 查詢結果可容忍暫時誤差
- 若使用 ORM可在 connection 層設定 transaction isolation
- WITH (NOLOCK)
1️⃣ 商品瀏覽頁(商品列表、搜尋結果)
使用者瀏覽商品時,看到的價格或庫存即使延遲幾秒、甚至略有偏差,也不影響體驗。
範例:
1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
使用者只是在「逛」,非購買瞬間,資料一致性不必嚴格 → 減少 shared lock,提升商品列表查詢速
2️⃣ 熱門商品排行榜(依銷量或瀏覽量排序)
排行榜本身是近似實時資料,但不需要精確到 transaction level。
1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
數字偶爾誤差 ±1 筆無妨,效能提升更重要
3️⃣ 商品瀏覽數或點擊統計查詢
用於即時顯示熱門關鍵字、即時點擊統計
1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
log 類資料量大、寫入頻繁,不加鎖查詢可避免阻塞
4️⃣ 類似商品推薦(基於用戶行為的快取查詢)
推薦引擎查詢中讀取暫時性資料,如最近瀏覽、加購紀錄
1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
這類查詢的準確性影響不大,反而需要速度
後台儀表板即時流量監控
顯示當前訂單量、線上人數、瀏覽量等近似統計。
1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
監控數據可誤差 1~2 秒,不需鎖定
8️⃣ 後台資料分析(非即時報表生成)
後台分析如「上週銷售趨勢」、「使用者地區分布」。
1 | SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; |
這類報表非即時決策,不會造成資料一致性問題
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.


