Postgresql
哪個更快:pg_catalog 或 information_schema?
pg_catalog
我理解和之間的高級差異information_schema
。但在許多情況下,工具可以選擇使用其中任何一個。我想知道是否有性能原因我們應該選擇其中一個。預計其中之一的查詢會更快嗎?它們在鎖方面的工作方式是否相同?
通常,
pg_catalog
速度更快。Postgres 中真正的資訊來源是
pg_catalog
. 中的觀點information_schema
基於這些。有時這些視圖相當複雜以符合 SQL 標準。對於針對資訊模式視圖的每個查詢,有一個更快的替代方案,直接基於
pg_catalog
表,省去了中間人。看:
對於簡單的查詢,它並不重要。但是,如果您以高頻率重複查詢,或者對於更複雜的情況,它可能會很重要。通常情況下,資訊模式視圖會做很多您沒有要求的工作。比較這兩個查詢:
EXPLAIN ANALYZE SELECT * FROM pg_catalog.pg_attribute; EXPLAIN ANALYZE SELECT * FROM information_schema.columns;
db<>在這裡擺弄
1 毫秒 vs 200 毫秒(當然取決於數據庫中的列數)。這就是遵守標準的代價——這也是使用資訊模式的主要原因:查詢在主要 Postgres 版本中是穩定的(但目錄表的核心列也幾乎不會改變)並且(理論上)可移植到其他關係型數據庫。(但編寫“可移植”程式碼是一項棘手的工作,除非絕對必須,否則我不會嘗試。)
有關的:
有時,一個或另一個不是正確的開始。通常,專用系統資訊函式或轉換為對象標識符類型可以簡化或解決任務。例子:
至於鎖:您通常不必擔心 Postgres 中的問題。由於MVCC 模型,讀者不會阻止作者,反之亦然。如果有的話,這將
information_schema
是一個更大的問題,因為它通常會引入比必要更多的目錄表。