從我做開發dba開始,count(*)和count(列)誰快就一直的困擾着我,通過這次學習,我總算是明白了。下面我把我的實驗過程寫出來。實驗環境: oracle11gR2, 實驗資料:自備
第一種情況:沒有索引的情況下 運作count(*)和count(列)
可以看到cost是一樣的。 現在執行計劃都是 全表掃表的。速度看起來是一樣的。
第二種情況:建立一個索引試試
create index idx_object_id on t(object_id);
結論:在有索引的情況下 OUNT(列)比COUNT(*)要。這個時候索引字段是包括null的,
如果我們限制下索引字段not Null
第三步:限制count字段not null
alter table T modify object_id not null;
看來count(列)和count(*)其實一樣快,如果索引列是非空的,count(*)可用到索引,此時一樣快!真相真是如此 嗎?不是的,其實兩者根本沒有可比性,性能比較首先要考慮寫法等價,這兩個語句根本就不等價!!!
通過上面的實驗,我以後不會吧count(*)和count(列)比較快慢了。
最後補充下count(*)包括Null值,count(列)不包括Null.