對於數百萬條記錄,哪個更快?具有多個值的過程或插入語句?
我編寫了一個 perl 腳本,它從製表符分隔的 txt 文件中讀取行,對其進行一些處理,然後插入 MySQL 表中。
目前,我正在使用 10,000 條記錄(來自腳本)進行插入查詢,並最終執行該語句。
insert into tablename values (1, 'kamal'), (2, 'nayan'), ......, (10000, 'kumar');
我想到的另一種方法是
stored procedure
. 誰能告訴我如何利用儲存過程來加快查詢速度?現在,我已經測試了一次插入一行的儲存過程,但這需要 10000 次過程呼叫,而 insert 語句只要求一次呼叫。任何幫助,將不勝感激。
引擎:InnoDB
版本:5.5.45
儲存過程更好,為什麼?閱讀:http ://www.sqlbook.com/SQL-Server/Why-use-Stored-Procedures-41.aspx
當查詢執行時,它會計算處理查詢的最有效方法並將其儲存在稱為執行計劃的東西中。根據查詢的不同,執行查詢所花費的大量時間實際上都花在了計算執行計劃上。
執行內聯 SQL 語句時,必須在每次查詢執行時生成執行計劃。當一個儲存過程被呼叫時,它的執行計劃被儲存在記憶體中,下次呼叫該儲存過程時,該執行計劃被從記憶體中檢索出來,不需要重新計算。這提高了執行速度並提高了數據庫性能。
LOAD DATA
通常是載入大量行的最快方法。
INSERT
具有 10K 行的單曲緊隨其後。如果你有太多行,你可能會在某個地方遇到一些限制,然後失敗。然後是一堆
INSERTs
,每個有 100 行。列表更靠後的是 10K 1 行
INSERT
語句。可能低於呼叫儲存過程 10K 次。目前尚不清楚額外的成本
CALL
是少於還是多於“編譯”SP 的任何節省。如果客戶端和伺服器相隔很遠(WAN),那麼主要的時序問題是它們之間的延遲。因此,盡量減少它們之間的往返次數會覆蓋我到目前為止所說的所有內容。