1樓:騰訊電腦管家
insert delayed 會讓insert優先順序變低,查詢優先。
把每個頁面的無數條insert語句合併成一句,能讓插入時間減少乙個數量級(10倍或更少),用括號把每條語句的資料分組即可。
不會的話,用mysqldump匯出乙個表,然後看看生成的sql就知道了。
關於mysql大量資料insert into 的時候問什麼執行起來慢
2樓:匿名使用者
使用etl工具,平時我一般處理的記錄不多百萬沒試過,10w條記錄大概不到2分鐘,有人用百萬的測試記錄。 etl廠商reikingibm information server(datastage)informatic基本架構支援執行平臺windows/unix/linuxwindows/unix/linuxwindows/unix/linux資料訪問模式支援絕大部分支援絕大部分支援絕大部分支援資料抽取方式支援生成檔案(落地)再匯入;直接匯入;訊息協議直接匯入;匯入方式,資料匯入支援批量載入(sql loader方式)、insert模式、行刪除模式。
其中insert模式是插入到臨時表,然後更新,需要手工寫update語句,配置比較複雜,行刪除模式這種方式不考慮,效能肯定會非常差。
批量載入模式,是對方工程師推薦的測試方案,其效能應該是最快的。以下測試是基於批量載入模式直接匯入;資料匯入目的庫有兩種載入方式。
normal和bulk,即普通插入和批量載入。
批量載入需要先將索引drop掉,在載入完成後重新建立,但是這種方式在對付。
大資料量時很慢,例如下文測試hisdeliver 1個月的資料抽取,286萬記錄,需要4分47秒,比普通插入。
要慢很多。下面的測試結果由informatic的工程師,其基於normal模式即時增量etl支援遞增欄位實現,觸發器模式,支援oracle cdccdc,實現秒級別的增量cdc,實現秒級別的增量,另外付費購買效能單表hisdeliver抽取,記錄數124810,耗時比較1分16秒17秒15秒單表hisdeliver抽取,記錄數2859999,耗時比較22分12秒6分12秒2分58秒採集sqlserver資料;採集表zygd(記錄數:597872)測試報錯41秒16秒流程中是否支援並行載入支援支援支援並行載入效能client 730279行5分鐘1分14秒2分02秒clientinfo 739278行7分鐘2分18秒1分50秒stockholder 108378911分鐘2分59秒3分01秒hisdeliver 124810行未載入48秒20秒。
3樓:匿名使用者
插入上百萬條資料?那你乾脆直接用匯入工具進行匯入得了。
mysql大量資料插入慢的問題
4樓:匿名使用者
用第三方介質匯入,速度比你執行insert語句快。比如用excel或者access**充當介質。
如何優化mysql insert效能
5樓:朱秋霞
對於一些資料量較大的系統,面臨的問題除了是查詢效率低下,還有乙個很重要的問題就是插入時間長。我們就有乙個業務系統,每天的資料匯入需要4-5個鐘。
這種費時的操作其實是很有風險的,假設程式出了問題,想重跑操作那是一件痛苦的事情。因此,提高大資料量系統的mysql insert效率是很有必要的。
1. 一條sql語句插入多條資料。
常用的插入語句如:
insertinto`insert_table` (datetime`, uid`, content`, type`) values('0', 'userid_0', 'content_0', 0);
insertinto`insert_table` (datetime`, uid`, content`, type`) values('1', 'userid_1', 'content_1', 1);
修改成:insertinto`insert_table` (datetime`, uid`, content`, type`) values('0', 'userid_0', 'content_0', 0), '1', 'userid_1', 'content_1', 1);
修改後的插入操作能夠提高程式的插入效率。這裡第二種sql執行效率高的主要原因有兩個,一是減少sql語句解析的操作, 只需要解析一次就能進行資料的插入操作,二是sql語句較短,可以減少網路傳輸的io。
2. 在事務中進行插入處理。把插入修改成:
start transaction;
insertinto`insert_table` (datetime`, uid`, content`, type`) values('0', 'userid_0', 'content_0', 0);
insertinto`insert_table` (datetime`, uid`, content`, type`) values('1', 'userid_1', 'content_1', 1);
.commit;
使用事務可以提高資料的插入效率,這是因為進行乙個insert操作時,mysql內部會建立乙個事務,在事務內進行真正插入處理。通過使用事務可以減少建立事務的消耗,所有插入都在執行後才進行提交操作。
6樓:網友
這個問題可深可淺,mysql的寫效率一直被人詬病。
簡單的來說你可以用批量插入, insert into table (key1,key2) values(1,2),(1,2)..
當然你可能已經用這種方法了,但結果還是慢,那就先檢視你用的是myisam還是innodb。
如果你使用的是innodb,修改innodb快取innodb_buffer_pool_size一般是你記憶體的60%, innodb_flush_log_at_trx_commit = 0或2, 提高日誌更新效率; innodb_thread_concurrency 根據你cpu的核數來調整。
到最後你可能發現這些東西都不能真正的提高insert的速度,這就是被人詬病的mysql寫效能。 你智慧型用load data infile的方式,這是一種快速的終極方法,但代價是不能保證事物處理的原子性,而且不允許在儲存過程中使用。
我以前在這個問題上掙扎了很久,最終的方法是修改業務策略,資料存放盡量精簡,減少對mysql的讀寫,這才是終極的解決之道。我曾經頭痛的難題通過修改業務邏輯把更新速度從47分鐘減少到秒,只要結果一樣就不用去折騰mysql了。
j**a 怎麼把5萬條資料分批插入資料到mysql,之前插1,2萬沒事, 多了就記憶體溢位
7樓:
你的事務控制問題。
大量資料插入的時候,可以將資料量分批,每次事務提交一批。
例如:;// 更改jdbc事務的預設提交方式。
statement stmt = ;
第一批 省略n條。
insert into dept values (52,'a','aa')");
insert into dept values (53,'b','bb')");
insert into dept values (54,'c','cc')");
//提交jdbc事務。
/ 第二批 省略n條。
stmt = ;
insert into dept values (52,'a','aa')");
insert into dept values (53,'b','bb')");
insert into dept values (54,'c','cc')");
//提交jdbc事務。
/ 第n批。
/ 恢復jdbc事務的預設提交方式;
8樓:莫多言白
不管是map,還是memcache都會消耗記憶體如果機器記憶體很大,你可以給虛擬機器分配足夠大的記憶體如果你機器記憶體不大,就需要分批將資料讀入到程式裡,不要一次把3w的資料都讀入到程式中。
可以讀1w插1w
9樓:網友
你也不貼查詢條件,沒法優化查詢語句,佔就佔著吧。
10樓:華碩服務
遊戲的執行和機器的cpu,記憶體,獨立顯示核心等硬體配置有直接的關係,另外也和系統,驅動,其他軟體等也有聯絡。當前,是否可以玩乙個遊戲,首先需要檢視遊戲執行的配置要求和機器的配置要求做乙個對比,檢視機器的配置是否符合。如果可以滿足遊戲的最低執行需求,則可以支援。"
怎麼應對同事的評價,如何應對同事的評價?
有時候,他們可能無意識到自己的言行對你造成了困擾,與他們坦誠交流能幫助他們意識到這一點。.設定邊界 與同事進行交流時,可以明確表示你不希望談論關於穿著方面的話題,並且希望他們尊重你的個人空間和私隱。是嗎?你今天的穿著也很不錯。或者 我喜歡這種風格,感謝誇獎!.尋求支援 如果上述方法無法解決問題,或者...
如何應對無禮的行為?怎麼應對無禮的要求?
無禮之人我們不時會遇到 無禮糾纏 無端尋釁 刻薄挖苦 出口成髒,等等。與這些無禮的人 令人討厭的人交談,既不能冷眼相對,辱罵對方,也不能大發雷霆,以粗對粗 當然也不應該置之不理 更不能面紅耳赤手足無措,不知如何是好。最理智 最有效的方法是運用以下介紹的交談辭令巧妙出擊,穩妥地保護自己的尊嚴與人格。....
灑掃應對怎麼寫,灑掃應對的解釋
灑掃應對的解釋 灑掃應對的解釋灑水掃地,酬答賓客。封建時代儒家教育 學習的基本內容 之一 宋 朱熹 大學章句 序 人生八歲,則自王公以下,至於庶人之子弟,皆入小學,而教之以灑掃應對進退之節,禮樂 射御書數之文。元 劉壎 隱居通議 理學一 朱氏 之學則主於下學上達,必由灑掃應對而馴至於精義入神。明 王...