0
我想知道爲什麼count(*)的總運行時間小於同一個表的count(primary_key)?兩種計數方法的總運行時間
查詢計劃(使用解釋分析)顯示每次Postgresql正在執行Seq掃描而不是使用索引?爲什麼會發生?以及爲什麼在這種情況下不使用索引?
編輯:count(1)
沒有什麼區別。
我想知道爲什麼count(*)的總運行時間小於同一個表的count(primary_key)?兩種計數方法的總運行時間
查詢計劃(使用解釋分析)顯示每次Postgresql正在執行Seq掃描而不是使用索引?爲什麼會發生?以及爲什麼在這種情況下不使用索引?
編輯:count(1)
沒有什麼區別。
當您使用SELECT COUNT(*)
或SELECT COUNT()
時,您只是計算表中的行,忽略列數據。
當您使用SELECT COUNT(primary_key)
時,還必須從行中提取第primary_key
列,並且 - 根據SQL引擎,我認爲 - 只有非空值才被視爲計數。
是的,我知道這兩者之間的區別,但我的問題是關於索引的使用。爲什麼seq掃描索引是否可以在這裏使用? – Borys
索引在查找特定行時非常有用。你在計數,所有這些都很重要。索引加速查找。 –
我不能同意你,看這裏https://wiki.postgresql.org/wiki/Index-only_scans#Is_.22count.28.2A.29.22_much_faster_now.3F – Borys