![](https://img2023.cnblogs.com/blog/3076680/202306/3076680-20230624223008408-1032311269.png) # 1. 無限長的結果集是導致響應緩慢的常見原因 ## 1.1. 當違反穩態模式時,就可能產生無限長的結果集 # ...
1. 無限長的結果集是導致響應緩慢的常見原因
1.1. 當違反穩態模式時,就可能產生無限長的結果集
1.2. 當調用方允許另一個系統支配調用時,就會出現一個無限長的結果集
2. 資料庫突然返回500萬行,而不是通常的100多行時會發生什麼?
2.1. 在用戶失去興趣後的很長時間內,還在一個while迴圈中打轉
2.2. 除非應用程式明確限制了其可以處理的結果數量,否則系統就可能會耗盡記憶體
3. 早期的社交媒體網站假定每個用戶的連接數量將會呈現鐘形曲線一樣的分佈,但事實上是一個冪律分佈
3.1. 如果使用鐘形曲線分散式關係進行測試,則永遠不會期望能載入一個其關係數量比平均值多幾百萬倍的實體
3.2. 但是當使用冪律分佈時,肯定會出現這種情況
4. 某表從不會超過1000行,但DBA發現,它位於最大系統開銷查詢列表之首
4.1. 高CPU使用率看起來像是垃圾回收造成的
4.2. 這個通常很小的表,當時竟然擁有超過1000萬行的記錄
4.2.1. 由於在開發過程中的數據集往往很小,因此應用程式開發工程師可能永遠不會體驗到這樣的負面後果
4.3. 避免這台應用程式伺服器查詢中缺少LIMIT子句所造成的災難
4.4. sql
-- Microsoft SQL Server
SELECT TOP 15 colspec FROM tablespec
-- Oracle(since 8i)
SELECT colspec FROM tablespec
WHERE rownum <= 15
-- MySQL and PostgreSQL
SELECT colspec FROM tablespec
LIMIT 15