2013-07-12 34 views
0

我想知道爲什麼count(*)的總運行時間小於同一個表的count(primary_key)?兩種計數方法的總運行時間

查詢計劃(使用解釋分析)顯示每次Postgresql正在執行Seq掃描而不是使用索引?爲什麼會發生?以及爲什麼在這種情況下不使用索引?

編輯:count(1)沒有什麼區別。

回答

0

當您使用SELECT COUNT(*)SELECT COUNT()時,您只是計算表中的行,忽略列數據。

當您使用SELECT COUNT(primary_key)時,還必須從行中提取第primary_key列,並且 - 根據SQL引擎,我認爲 - 只有非空值才被視爲計數。

+0

是的,我知道這兩者之間的區別,但我的問題是關於索引的使用。爲什麼seq掃描索引是否可以在這裏使用? – Borys

+0

索引在查找特定行時非常有用。你在計數,所有這些都很重要。索引加速查找。 –

+0

我不能同意你,看這裏https://wiki.postgresql.org/wiki/Index-only_scans#Is_.22count.28.2A.29.22_much_faster_now.3F – Borys