count(1) 與count(*)有性能差別么?

無數(shù)次聽到“不要寫count(*)要寫count(1),count(*)跑得慢”這種錯誤說法。

為什么count(1)與count(*)性能相同呢?因?yàn)閳?zhí)行計(jì)劃相同,性能相同。本篇以oracle 11g為例講解


首先 Oracle不允許純空行數(shù)據(jù)(即所有字段皆為null),所以count(1)與count(*)結(jié)果必然相同,首先在無索引情況下 count(1) count(*) count(object_id) 的執(zhí)行計(jì)劃全部一樣全表掃描:


有索引情況再看,count(1) count(*) count(object_id) 一樣,快速全掃描

Create Index IND_test_a On a (object_id,0)? --為什么建object,0組合索引 因?yàn)閛racle索引不存null,所以加上0保證所有行都在索引中

如果將索引改為 Create Index IND_test_a On a (object_id)會怎么樣呢?count(1)與count(*)無法走索引,因?yàn)樗饕]有包含所有行,只能全表掃秒,而count(object)可以走索引快速全掃描。

SQL優(yōu)化不能靠瞎猜,而是分析SQL背后的實(shí)際執(zhí)行邏輯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容