資料庫的使用中,count() 函式用於統計資料表的記錄,返回匹配指定條件的行數。
資料表的資料量很大時,對資料表作分析,使用 count(1) 比使用 count(*) 用時多。從執行計畫看, count(1)、count(*)的效果是相同的,但實際 count(1)的執行用時相對較少(1w以內資料量)。如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小。因為 count(*) 會自動優化指定到某乙個字段,所以沒必要用count(1),用count(*) sql 會幫你完成優化,因此 count(1)和count(*)基本沒有差別!
這兩者的主要區別是:count(1) 統計的是資料表中的所有記錄數,包含欄位為 null 的記錄;count(列名) 統計的是該字段在該錶**現的次數,會忽略欄位為 null 的情況,不統計空記錄。
在執行效果上:
在執行效率上:
count(主鍵) 不一定比count(其餘索引) 快:
索引是一種b+樹的結構,以塊為單位進行儲存。假設塊大小是1k,主鍵索引大小為4b,有乙個欄位a的索引大小為2b。 同樣乙個塊,能存放256個主鍵索引,但是能存放512個字段a的索引。 假設總資料是2k條,意味著主鍵索引占用了8個塊,而a欄位索引占用了4個塊,統計時用主鍵索引需要經歷的塊多,io次數多,效率也比a欄位索引慢。
程式開發第4享 sql中三種count 函式詳解
在sql中,count count 1 count id 都有統計的功能,但三者之間又存在著一定的差異,下面從執行效果 執行效率等兩方面進行說明 1 執行效果 count 包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為null count 1 包括了忽略所有列,用1代表 行,在統計結果...
sql中的三種表聯結型別
以下內容是我在網上學習之後整理出來的,有不對的地方歡迎指正,共同學習。三種表聯結型別分別是inner join,left join,right join 1 名詞解釋 1 inner join 內聯結 根據on關鍵字後面的匹配條件進行過濾,僅返回完全滿足條件的記錄 2 left join 左聯結 以...
sql中的三種刪除方式區別
一 sql中的語法 1 drop table 表名稱 eg drop table dbo.sys test 2 truncate table 表名稱 eg truncate table dbo.sys test 3 delete from 表名稱 where 列名稱 值 eg delete from...