為什麼count 這麼慢?

2021-10-06 02:50:57 字數 665 閱讀 7047

當我們查詢一張資料量很大的表時,使用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語...