欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql中的count()、count(1)、count(字段)有什么區別嗎?

錢琪琛2年前11瀏覽0評論

1,比較count(*)和count(字段名)的區別:前者對行的數目進行計算,包含null。后者對特定的列的值具有的行數進行計算,不包含null,得到的結果將是除去值為null和重復數據后的結果。

2,count(1)跟count(主鍵)一樣,只掃描主鍵。

3,count(*)和count(1)在使用方式上一樣,但是在性能上有略微的區別。

首先,mysql數據庫本身對count(*)做了特別的優化處理,如果開發中確實需要使用到count聚合,那么優先考慮count(*)。

其次,count(主鍵)不一定比count(其余索引)快。索引是一種b+樹的結構,以塊為單位進行存儲。假設索引大小為4B,有一個字段A的索引大小為2B。同樣一個塊,能存放256個主鍵索引,但是能存放512個字段A的索引。假設總數據量是2K條,意味著索引占用了8個塊,而字段A索引占用了4個塊,統計時用主鍵需要經歷的io次數多,效率也比A字段索引慢。

接著,在使用count聚合函數時,如有where條件,且where條件的字段未建立索引,則查詢不會走索引,直接掃描了全表。

最后,count(字段),該字段非主鍵的情況最好不要出現,因為該方式不走索引。