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 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双子宫可以做试管婴儿吗?
- 下一篇: 重庆治少精无精最好的医院推荐