Mysql插入很慢,找到了稍微快點的方法

MYSQL批量插入數據庫實現語句性能分析

假定我們的表結構如下

代碼如下?

CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR( 50 ) NOT NULL,
value VARCHAR( 50 ) NOT NULL,
other_value VARCHAR( 50 ) NOT NULL
)

  通常情況下單條插入的sql語句我們會這么寫:

代碼如下?

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1');

  mysql允許我們在一條sql語句中批量插入數據,如下sql語句:

代碼如下?

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

  如果我們插入列的順序和表中列的順序一致的話,還可以省去列名的定義,如下sql

代碼如下?

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

  上面看上去沒什么問題,下面我來使用sql語句優化的小技巧,下面會分別進行測試,目標是插入一個空的數據表200W條數據

  第一種方法:使用insert into 插入,代碼如下:

代碼如下?


$params = array('value'=>'50');
set_time_limit(0);
echo date("H:i:s");
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date("H:i:s");

  最后顯示為:23:25:05 01:32:05 也就是花了2個小時多!

  第二種方法:使用事務提交,批量插入數據庫(每隔10W條提交下)最后顯示消耗的時間為:22:56:13 23:04:00 ,一共8分13秒 ,代碼如下:

代碼如下?

echo date("H:i:s");

$connect_mysql->query('BEGIN');
$params = array('value'=>'50');
for($i=0;$i<2000000;$i++){?
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query('COMMIT');
$connect_mysql->query('BEGIN');
}
}
$connect_mysql->query('COMMIT');
echo date("H:i:s");

  第三種方法:使用優化SQL語句:將SQL語句進行拼接,使用 insert into table () values (),(),(),()然后再一次性插入,如果字符串太長,

  則需要配置下MYSQL,在mysql 命令行中運行 :set global max_allowed_packet = 2*1024*1024*10;消耗時間為:11:24:06 11:25:06;

  插入200W條測試數據僅僅用了1分鐘!代碼如下:

代碼如下?

$sql= "insert into twenty_million (value) values";
for($i=0;$i<2000000;$i++){
$sql.="('50'),";
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);

  最后總結下,在插入大批量數據時,第一種方法無疑是最差勁的,而第二種方法在實際應用中就比較廣泛,第三種方法在插入測試數據或者其他低要求時比較合適,速度確實快。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386981.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386981.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386981.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux - 時間相關命令 - ntpdate, date, hwclock

1. 概述 最近也不知道寫啥了, 把之前的老文檔整理一下, 湊個數什么的配置時間這種工作, 偶爾還是要用一下主要描述 3 個命令的簡單適用 ntpdatehwlock2. ntpdate 1. 概述 用于同步時鐘的命令2. 機制 通常是有一個服務器對外提供時間客戶端可以與時間服務器同步ntp 是他們之間交…

RUNOOB python練習題1

用來練手的python 練習題&#xff0c;原鏈接 : python練習實例1 題干 : 有四個數字&#xff1a;1、2、3、4&#xff0c;能組成多少個互不相同且無重復數字的三位數&#xff1f;各是多少&#xff1f; import numpy as np cen np.array([1,2,3,4]) tens np.array([1,2,3,4])…

mysql explain用法和結果的含義

explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。 使用方法&#xff0c;在select語句前加上explain就可以了&#xff1a; 如&#xff1a; explain select surname,first_name form a,b where a.idb.id EXPLAIN列…

日志模塊logging用法

一、常用日志記錄場景及最佳解決方案&#xff1a; 日志記錄方式 最佳記錄日志方案 普通情況下&#xff0c;在控制臺顯示輸出 print() 報告正常程序操作過程中發生的事件 logging.info()(或者更詳細的logging.debug()) 發出有關特定事件的警告 warnings.warn()或者loggin…

MySQL 億級數據需求的優化思路(一),交易流水記錄的查詢

對MySQL的性能和億級數據的處理方法思考&#xff0c;以及分庫分表到底該如何做&#xff0c;在什么場景比較合適&#xff1f; 比如銀行交易流水記錄的查詢 限鹽少許&#xff0c;上實際實驗過程&#xff0c;以下是在實驗的過程中做一些操作&#xff0c;以及踩過的一些坑&#…

RUNOOB python練習題2

用來練手的python 練習題&#xff0c;原鏈接 : python練習實例2 題干 : 企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時&#xff0c;獎金可提10%&#xff1b;利潤高于10萬元&#xff0c;低于20萬元時&#xff0c;低于10萬元的部分按10%提成&#xff0c;高于10萬元的…

dubbo負載均衡策略和集群容錯策略

dubbo負載均衡策略 random loadbalance 默認情況下&#xff0c;dubbo是random load balance隨機調用實現負載均衡&#xff0c;可以對provider不同實例設置不同的權重&#xff0c;會按照權重來負載均衡&#xff0c;權重越大分配流量越高&#xff0c;一般就用這個默認的就可以了。…

MySQL 億級數據需求的優化思路(二),100億數據,1萬字段屬性的秒級檢索

最近在研究億級數據的時候&#xff0c;無意中看到了一個關于寫58同城的文章 https://blog.csdn.net/admin1973/article/details/55251499?fromtimeline 其實上面講的versionext的方式以及壓縮json的思路&#xff0c;對于我來講都可以看得懂&#xff0c;想得通&#xff0c;其…

RUNOOB python練習題3

用來練手的python 練習題&#xff0c;原鏈接 : python練習實例3 拿到題目就寫了如下代碼&#xff0c;思路是因為使用**0.5進行開平方操作時&#xff0c;python會將數據類型自動轉換為float單精度浮點型。這里利用提取其整數部分&#xff0c;來判斷這個數是否是完全平方數。 z…

使用git將項目上傳到github(最簡單方法)

使用git將項目上傳到github&#xff08;最簡單方法&#xff09; 首先你需要一個github賬號&#xff0c;所有還沒有的話先去注冊吧&#xff01; https://github.com/ 我們使用git需要先安裝git工具&#xff0c;這里給出下載地址&#xff0c;下載后一路直接安裝即可&#xff1…

數據庫 概念詳解

數據庫 概念詳解 一、MySQL MySQL 事務 MySQL 鎖 MySQL 二、Redis 三、MongoDB 四、Memcached 轉載于:https://www.cnblogs.com/guozepingboke/p/10743648.html

RUNOOB python練習題4

用來練手的python習題其四&#xff0c; 原題鏈接: python練習實例4 題干: 輸入某年某月某日&#xff0c;判斷這一天是這一年的第幾天&#xff1f; 這個題目比較簡單&#xff0c;只需要注意閏年和非閏年的區別就可以了。我這里使用numpy矩陣存儲每個月的天數&#xff0c;之后用…

GitHub入門:如何上傳與下載工程?

由于經常要在家寫代碼&#xff0c;所以需要有個能夠方便訪問代碼管理工具。最近嘗試了一下GitHub。經過了一翻糾結之后&#xff0c;基本上掌握了他的使用方式。 要使用GitHub需要首先在其網站上進行注冊。其官方網站是https://github.com/。注冊的流程在這里就不多少了&#x…

如何解決PIP命令不可用

今天想用PIP裝一個python包&#xff0c;發現PIP報錯&#xff0c;不是內部或外部命令。。。 遇事百度&#xff0c;有兩種說法&#xff0c;一&#xff0c;沒安裝包&#xff0c;不管那么多命令執行了再說 在命令行輸入&#xff1a;python -m ensurepip 將pip.exe文件下載下來 再pi…

RUNOOB python練習題5

用來練手的python 練習題其五&#xff0c;原鏈接 : python練習實例5 題干 : 輸入三個整數x,y,z&#xff0c;請把這三個數由小到大輸出。 又是非常簡單的排序算法&#xff0c;只要使用numpy矩陣的排序方法或者使用python list的排序算法就可以輕松解決。 源代碼如下 : import …

初步使用github,并上傳下載文件

使用GitHub需要先注冊GitHub的賬號,登陸進去 然后開始創建項目 start a project 創建完成,開始生成公私鑰,可以不必每次都要輸密碼 ssh-keygen -t rsa -C "mghxy123163.com" //填寫email地址&#xff0c;然后一直“回車”ok 然后把公鑰導入GitHub中的key里面去,也…

NOIP2000提高組復賽C 單詞接龍

題目鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/248/C 題目大意&#xff1a; 略 分析&#xff1a; 注意點&#xff1a;1.前綴和后綴的公共部分應該選最短的。2.如果兩個字符串前綴和后綴的公共部分恰好是其中一個字符串&#xff0c;那么這兩個字符串不能合并。 代碼…

右鍵Git Bash Here不見了怎么辦,手把手教你還原!

第一步&#xff0c;window R&#xff0c;輸入regedit回車進入注冊表 依次進入HKEY_CLASSES_ROOT —-》 Directory —-》Background —-》 shell 右鍵點擊shell&#xff0c;選擇新建&#xff0c;然后選擇項&#xff0c;命名為 Git Bash Here&#xff0c;成功后進入桌面右鍵發現…

RUNOOB python練習題6 斐波那契數列

用來練手的python 練習題其六&#xff0c;原鏈接 : python練習實例6 題干 : 斐波那契數列 斐波那契數列可以說是很好的遞歸理解工具了&#xff0c;這里就用遞歸實現一下斐波那契數列。 源代碼如下: # 返回fibonacci數列中某一項的數值 def Fibonacci(n):if n 1:return 1eli…

linux 單用戶密碼修改

1.啟動系統&#xff0c;并在GRUB2啟動屏顯時&#xff0c;按下e鍵進入編輯模式。 2.在linux16/inux/linuxef所在參數行ro更改為init/sysroot/bin/sh 3.按Crlx啟動到shell. 4.掛載文件系統為可寫模式: mount -o remount &#xff0c;rw /sysroot 5換根chroot /sysroot 6.運行pass…