日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql count 不等于_Mysql 不同的 count 区别

發布時間:2023/12/1 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql count 不等于_Mysql 不同的 count 区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不同 count 的區別:

count(*)、count(主鍵 id)和 count(1) 都表示返回滿足條件的結果集的總行數;而 count(字 段), 則表示返回滿足條件的數據行里面,參數“字段”不為 NULL 的總個數。

性能:

count(主鍵 id):InnoDB 引擎會遍歷整張表,把每一行的 id 值都取出來,返回 給 server 層。server 層拿到 id 后,判斷是不可能為空的,就按行累加。

count(1):InnoDB 引擎遍歷整張表,但不取值。server 層對于返回的每一行, 放一個數字“1”進去,判斷是不可能為空的,按行累加。

單看這兩個用法的差別的話,能對比出來,count(1)執行得要比 count(主鍵 id)快。因為 從引擎返回 id 會涉及到解析數據行,以及拷貝字段值的操作。

對于 count(字段)來說:

1)如果這個“字段”是定義為 not null 的話,一行行地從記錄里面讀 出這個字段,判斷不能為 null,按行累加;

2)如果這個“字段”定義允許為 null,那么執行的時候,判斷到有可能是 null,還要把值取 出來再判斷一下,不是 null 才累加。

也就是,server 層要什么字段,InnoDB 就返回什么字段。 但是 count(*)是例外,并不會把全部字段取出來,而是專門做了優化,不取值。count(*) 肯定不是 null,按行累加。 看到這里,你一定會說,優化器就不能自己判斷一下嗎,主鍵 id 肯定非空啊,為什么 不能按照 count(*)來處理,多么簡單的優化啊。當然,MySQL 專門針對這個語句進行優化, 也不是不可以。但是這種需要專門優化的情況太多了,而且 MySQL 已經優化過 count(*)了, 我們直接使用這種用法就可以了。

結論:

所以結論是:按照效率排序的話,count(字段)

總結

以上是生活随笔為你收集整理的mysql count 不等于_Mysql 不同的 count 区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。