編輯:對不起,我應該更好地解釋一下,數據不在銷售隊伍中,從後端轉儲,ID字段是字母數字[例如。 00190000010PBdSAAX],一般都是18長&總是唯一的。我將對數據類型進行一些更改,刪除帶引號的標識符,並對索引進行一些更改,看看我如何去,謝謝!PostgresSQL從另一個表更新一個表
我正在使用Postgresql 9.5。我將1個表更新爲另一個表,兩個表在結構上是相同的,一個有200萬個記錄[目標],另一個大約70k [來源],基本上只是對現有數據進行更新並使用獨特的方式插入任何新記錄ID來檢查。
即使沒有什麼可以更新,它只是掃描記錄,它仍然需要5分鐘更長的時間,當有東西需要更新時,嘗試使用或不使用索引,連接這兩個字段的方式稍有不同[只有WHERE和實際加入]。只是想知道是否有更好的方法來做到這一點,或者如果我這樣做只是錯誤的,只用了幾天的Postgres。
我知道⑤分鐘沒什麼大不了[更長,如果它執行任何更新],但其約9其他表&類似的過程,這是一箇中等規模的例子
兩個表看起來像下面的[但與不同的表名稱僅]
CREATE TABLE public."Cases"
(
"Past_Due__c" character varying(255),
"Case_Age__c" character varying(255),
"Next_Step_Due_Date__c" character varying(255),
"Id" character varying(255),
"AccountId" character varying(255),
"Account_Number__c" character varying(255),
"Account_Type__c" character varying(255),
"CaseNumber" character varying(255),
"CaseSubTypeDetail__c" character varying(255),
"Case_Sub_Type__c" character varying(255),
"Case_Type__c" character varying(255),
"ClosedDate" character varying(255),
"Collections_Step__c" character varying(255),
"Customer_Number__c" character varying(255),
"Next_Collections_Step__c" character varying(255),
"Origin" character varying(255),
"Priority" character varying(255),
"Related_Complaint_Case__c" character varying(255),
"Status__c" character varying(255),
"Subject" text,
"Type" character varying(255),
"CreatedDate" character varying(255),
"OwnerId" character varying(255),
"ContactId" character varying(255),
"Status" character varying(255),
"Case_Comments__c" text,
"Subscription__c" character varying(255),
"Description" text,
"Case_Outcome__c" text,
"Case_Outcome_Reason__c" text,
"Adjustment_Amount__c" character varying(255),
"Product_Adjustment_Amount__c" character varying(255),
"Product_Adjustment_Reason__c" character varying(255),
"Service__c" character varying(255),
"ParentId" character varying(255)
)
WITH (
OIDS=FALSE
);
更新腳本如下
update public."cases" t2
set past_due__c = t1.past_due__c, case_age__c = t1.case_age__c, next_step_due_date__c = t1.next_step_due_date__c, accountid = t1.accountid, account_number__c = t1.account_number__c, account_type__c = t1.account_type__c, casesubtypedetail__c = t1.casesubtypedetail__c, case_sub_type__c = t1.case_sub_type__c, case_type__c = t1.case_type__c, closeddate = t1.closeddate, collections_step__c = t1.collections_step__c, customer_number__c = t1.customer_number__c, next_collections_step__c = t1.next_collections_step__c, origin = t1.origin, priority = t1.priority, related_complaint_case__c = t1.related_complaint_case__c, status__c = t1.status__c, subject = t1.subject, type = t1.type, ownerid = t1.ownerid, contactid = t1.contactid, status = t1.status, case_comments__c = t1.case_comments__c, subscription__c = t1.subscription__c, description = t1.description, case_outcome__c = t1.case_outcome__c, case_outcome_reason__c = t1.case_outcome_reason__c, adjustment_amount__c = t1.adjustment_amount__c, product_adjustment_amount__c = t1.product_adjustment_amount__c, product_adjustment_reason__c = t1.product_adjustment_reason__c, service__c = t1.service__c, parentid = t1.parentid, billing_account__c = t1.billing_account__c, billing_account_credit_balance__c = t1.billing_account_credit_balance__c, billing_address__c = t1.billing_address__c, lastmodifiedbyid = t1.lastmodifiedbyid, lastmodifieddate = t1.lastmodifieddate
from public."temp_update_cases" t1
where t1.id = t2.id
一切我需要做我想通了,但是這一次是殺害我
還注意到我沒有觸及任何默認設置,並且我在運行更新之前抽空 –
無關,但是:您應該**避免引用標識符。 –
請編輯您的問題並添加使用'explain(analyze,verbose)'生成的執行計劃。 [_Formatted_](http://stackoverflow.com/editing-help#code)**文本**,請[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i - 未上傳圖像-的代碼上那麼當灰化-A-問題/ 285557#285557)。有關如何詢問與性能相關的問題的更多信息,另見http://wiki.postgresql.org/wiki/SlowQueryQuestions。 –