當我們查詢一張資料量很大的表時,使用sql:
select
count(*
)from t1;
這條sql非常耗時。那麼當執行count(*)的時候發生了什麼呢?
count(1)的sql執行計畫如下:
count(*)的sql執行計畫如下:
兩者執行計畫相同,所以速度相同。
首先初始化時,執行一次精確的計數:
select
count(*
)from t1;
然後,把結果存在redis中:
set t1_count 10000
當t1寫入一條資料時,同時將redis計數器+1:
incr t1_count
當t1刪除一條資料時,同時將redis計數器-1:
decr t1_count
但是對mysql增刪的操作和對redis增刪的操作一定要在同乙個事務中,保證原子性。
當需要查詢資料集的行數時,只需要去redis中去查即可:
get t1_count
為什麼count 這麼慢
不同count的用法 count 是乙個聚合函式,對於返回的結果集,一行行地判斷,如果count函式的引數不是null,累計值就加1,否則不加。最後返回累計值。count的用法有多種,分別是count count 字段 count 1 count 主鍵id 那麼多種用法,到底有什麼差別呢?當然,前提...
資料庫專題 深入理解count 為什麼這麼慢
曾經在依次面試中被問到過這麼乙個問題,假設開發乙個交易平台過程中,有遇到過需要計算交易記錄總數的情況該怎麼辦。可能大多數人的回答都是用select count from t 不就搞定了嗎 但是,面試官又問到隨著系統中記錄數越來越多,這條語句執行得越來越慢。那麼為什麼這麼慢呢,今天我們就來聊一聊原因吧...
PHP的echo為什麼這麼慢
作為乙個行走江湖多年的老中醫,今天受命去解決一例前端頁面展現緩慢的問題。問題頁的情況如下 apache php 使用smarty模板輸出內容 頁面最終輸出內容較大,80k 頁面執行時間在500ms以上 祭出法寶xhprof對問題頁面做了細緻檢查,發現頁面的瓶頸竟然是模板 編譯後的 中的乙個echo語...