這是一個由兩部分組成的問題。如果你正在檢查這個,謝謝你的時間!我的Postgres查詢如何執行得更快?我可以使用Python來提供更快的迭代嗎?
有沒有辦法讓我的查詢速度更快?
我以前問過一個問題here,並最終能夠自己解決問題。
但是,當我針對包含40,000多條記錄的數據庫運行時,我設計的查詢結果非常慢(25分鐘以上)。
該查詢服務於其目的,但我希望你們中的一位聰明人能夠指出我如何使查詢以更優選的速度執行。
我的查詢:
with dupe as ( select json_document->'Firstname'->0->'Content' as first_name, json_document->'Lastname'->0->'Content' as last_name, identifiers->'RecordID' as record_id from ( select *, jsonb_array_elements(json_document->'Identifiers') as identifiers from staging ) sub group by record_id, json_document order by last_name ) select * from dupe da where ( select count(*) from dupe db where db.record_id = da.record_id ) > 1;
此外,一些示例數據:
行1:
{ "Firstname": "Bobb", "Lastname": "Smith", "Identifiers": [ { "Content": "123", "RecordID": "123", "SystemID": "Test", "LastUpdated": "2017-09-12T02:23:30.817Z" }, { "Content": "abc", "RecordID": "abc", "SystemID": "Test", "LastUpdated": "2017-09-13T10:10:21.598Z" }, { "Content": "def", "RecordID": "def", "SystemID": "Test", "LastUpdated": "2017-09-13T10:10:21.598Z" } ] }
行2:
{ "Firstname": "Bob", "Lastname": "Smith", "Identifiers": [ { "Content": "abc", "RecordID": "abc", "SystemID": "Test", "LastUpdated": "2017-09-13T10:10:26.020Z" } ] }
如果我把在我的查詢結果中,或一部分結果放入可以使用Pandas進行操作的Python環境中,我如何迭代我的查詢(或子查詢)的結果以達到與原始查詢相同的最終結果?
是否有一種更簡單的方法,使用Python,以與Postgres相同的方式遍歷未嵌套的json數組?
例如,在執行此查詢後:
select json_document->'Firstname'->0->'Content' as first_name, json_document->'Lastname'->0->'Content' as last_name, identifiers->'RecordID' as record_id from ( select *, jsonb_array_elements(json_document->'Identifiers') as identifiers from staging ) sub order by last_name;
如何,使用Python /熊貓,我可以採取查詢的結果,並執行類似:
da = datasets[query_results] # to equal my dupe da query db = datasets[query_results] # to equal my dupe db query
然後執行
相當於select * from dupe da where ( select count(*) from dupe db where db.record_id = da.record_id ) > 1;
in Python?
如果我在這裏沒有提供足夠的信息,我很抱歉。我是一名Python新手。任何和所有的幫助,非常感謝!謝謝!!
首先從使用CTE('WITH'查詢)轉換爲使用子查詢在FROM表單。見https://blog.2ndquadrant.com/postgresql-ctes-are-optimization-fences/ –
感謝克雷格!我現在正在閱讀這篇文章,看起來這可能會有所幫助。 +1 – jmoneygram
一旦你弄清楚了方法,它在SQL中執行的事情幾乎總是比客戶端迭代更快。有時需要一些額外的思考。在編輯中,請爲您的查詢顯示「EXPLAIN ANALYZE」輸出。 –