久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中COUNT如何使用

149次閱讀
沒有評論

共計 1225 個字符,預計需要花費 4 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章將為大家詳細講解有關 MySQL 中 COUNT 如何使用,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

COUNT(expr)返回檢索行中 expr 不為 NULL 的數量,其結果是一個 BIGINT 類型的值,如果沒有符合行,那么返回 0。該處需要注意的是所謂的 NULL 指的是 expr 表達式,并不是所需要檢測的數據行的值,如果 expr 與數據列名相同,那么則返回該數據列不為 NULL 的數量。

MySQL 的 COUNT

對于傳統的存儲引擎 InnoDb 而言,存儲一個表的精確行數是十分困難的,因為多事務操作可能會并發,并且同時影響表的行數,所以為了避免并發線程查詢同一個表而得到不同的行數,InnoDb 沒有對表的行數進行內部存儲,所以在 InnoDb 中,SELECT(*)僅僅返回當前事務所讀取到的行數。在 MySQL5.7.18 之前,InnoDb 通過掃描聚簇索引來處理 SELECTCOUNT(*)語句,5.7.18 之后 InnoDb 使用最小且可用的第二索引來處理 SELECTCOUNT(*)語句(除非查詢優化器提示使用一個其他的索引)。如果沒有第二索引,那么需要掃描聚簇索引。

如果索引記錄沒有全部在緩沖池中,那么處理 SELECTCOUNT(*)語句是需要耗費一些時間的。如果需要追求一個快速的計算,那么可以在應用中單獨設計一個表用于在目標表進行插入或刪除操作時記錄其數據條數。然而,在大量的并行處理來 update 目標表的計數器表時會很難擴展。如果可以 SHOWTABLESTATUS 語句來獲取該信息。

InnoDb 以相同的方式處理 SELECTCOUNT(*)和 SELECTCOUNT(1),并沒有性能上的差距。

對于 MyIsam 引擎,COUNT(*)在沒有 WHERE 子句的情況下是非常快的,因為在 MyIsam 引擎中,表的精確行數會被保存下來。如果 MyIsam 表的第一列被設置為非空,那么 COUNT(1)具有同樣的優化效果 (在對于 100w 條含有非空的簡單數據進行 COUNT(*) 與 COUNT(1)的對比測試沒有明顯發現性能差異)。

COUNT 的規范

COUNT(*)與 COUNT(常量)都是查找表中記錄的行數,可以包含 NULL 數據;COUNT(列名)是查找表中該列非空的函數。

對于 COUNT(*)相比 COUNT(常量)而言,COUNT(*)是 SQL92 中定義的標準統計行數的語法,所以許多數據庫對其進行優化,對于 MySQL 而言,COUNT(常量)也是轉換為 COUNT(*)執行的,標準語法優先使用 COUNT(*),因為各個數據庫查詢優化器的優化策略肯定是從 COUNT(*)開始的,阿里的 SQL 開發規范中也明確寫明要使用 COUNT(*)。

關于 MySQL 中 COUNT 如何使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計1225字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 施秉县| 时尚| 镇巴县| 尉氏县| 安康市| 科技| 望都县| 台湾省| 虞城县| 彭泽县| 志丹县| 鹰潭市| 麻栗坡县| 赣榆县| 绥宁县| 德令哈市| 青阳县| 县级市| 甘南县| 百色市| 凉山| 海兴县| 固始县| 章丘市| 巴青县| 会理县| 邮箱| 大同市| 山阳县| 自治县| 济南市| 夏津县| 连江县| 彰化县| 永昌县| 岳阳县| 密云县| 电白县| 张家川| 蒙自县| 阿荣旗|