最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探究MySQL中索引和提交頻率對InnoDB表寫入速度的影響

 更新時間:2015年05月08日 11:20:53   投稿:goldensun  
這篇文章主要介紹了MySQL中索引和提交頻率對InnoDB表寫入速度的影響,作者通過實(shí)際測試運(yùn)行時間的對比來驗(yàn)證,需要的朋友可以參考下

本次,我們來看看索引、提交頻率對InnoDB表寫入速度的影響,了解有哪些需要注意的。

先直接說幾個結(jié)論吧:

1、關(guān)于索引對寫入速度的影響:
a、如果有自增列做主鍵,相對完全沒索引的情況,寫入速度約提升 3.11%;
b、如果有自增列做主鍵,并且二級索引,相對完全沒索引的情況,寫入速度約降低 27.37%;

因此,InnoDB表最好總是有一個自增列做主鍵。

2、關(guān)于提交頻率對寫入速度的影響(以表中只有自增列做主鍵的場景,一次寫入數(shù)據(jù)30萬行數(shù)據(jù)為例):

a、等待全部數(shù)據(jù)寫入完成后,最后再執(zhí)行commit提交的效率最高;
b、每10萬行提交一次,相對一次性提交,約慢了1.17%;
c、每1萬行提交一次,相對一次性提交,約慢了3.01%;
d、每1千行提交一次,相對一次性提交,約慢了23.38%;
e、每100行提交一次,相對一次性提交,約慢了24.44%;
f、每10行提交一次,相對一次性提交,約慢了92.78%;
g、每行提交一次,相對一次性提交,約慢了546.78%,也就是慢了5倍;

因此,最好是等待所有事務(wù)結(jié)束后再批量提交,而不是每執(zhí)行完一個SQL就提交一次。
曾經(jīng)有一次對比測試mysqldump啟用extended-insert和未啟用導(dǎo)出的SQL腳本,后者比前者慢了不止5倍。
重要:這個建議并不是絕對成立的,要看具體的場景。如果是一個高并發(fā)的在線業(yè)務(wù),就需要盡快提交事務(wù),避免鎖范圍被擴(kuò)大。但如果是在非高并發(fā)的業(yè)務(wù)場景,尤其是做數(shù)據(jù)批量導(dǎo)入的場景下,就建議采用批量提交的方式。

下面是詳細(xì)的測試案例過程,有興趣的同學(xué)可以看看:

DROP TABLE IF EXISTS `mytab`;
CREATE TABLE `mytab` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`c1` int(11) NOT NULL DEFAULT ‘0',
`c2` int(11) NOT NULL DEFAULT ‘0',
`c3` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`c4` varchar(200) NOT NULL DEFAULT ”,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

DELIMITER $$$
DROP PROCEDURE IF EXISTS `insert_mytab`;

CREATE PROCEDURE `insert_mytab`(in rownum int, in commitrate int)
BEGIN
DECLARE i INT DEFAULT 0;

SET AUTOCOMMIT = 0;

WHILE i < rownum DO INSERT INTO mytab(c1, c2, c3,c4) VALUES( FLOOR(RAND()*rownum),FLOOR(RAND()*rownum),NOW(), REPEAT(CHAR(ROUND(RAND()*255)),200)); SET i = i+1; /* 達(dá)到每 COMMITRATE 頻率時提交一次 */ IF (commitrate > 0) AND (i % commitrate = 0) THEN
COMMIT;
SELECT CONCAT(‘commitrate: ‘, commitrate, ‘ in ‘, I);
END IF;

END WHILE;

/* 最終再提交一次,確保成功 */

COMMIT;
SELECT ‘ALL COMMIT;';

END; $$$

#測試調(diào)用
call insert_mytab(300000, 1); — 每次一提交
call insert_mytab(300000, 10); — 每10次一提交
call insert_mytab(300000, 100); — 每100次一提交
call insert_mytab(300000, 1000); — 每1千次一提交
call insert_mytab(300000, 10000); — 每1萬次提交
call insert_mytab(300000, 100000); — 每10萬次一提交
call insert_mytab(300000, 0); — 一次性提交

測試耗時結(jié)果對比:

201558110956408.png (455×173)

相關(guān)文章

  • MySQL全面瓦解之查詢的正則匹配詳解

    MySQL全面瓦解之查詢的正則匹配詳解

    這篇文章主要給大家介紹了關(guān)于MySQL全面瓦解之查詢的正則匹配的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • mysql?8.0.28?winx64.zip安裝配置方法圖文教程

    mysql?8.0.28?winx64.zip安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql?8.0.28?winx64.zip安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Mysql 5.6使用配置文件my.ini來設(shè)置長時間連接數(shù)據(jù)庫的問題

    Mysql 5.6使用配置文件my.ini來設(shè)置長時間連接數(shù)據(jù)庫的問題

    這篇文章主要介紹了Mysql 5.6使用配置文件my.ini來設(shè)置長時間連接數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • MySQL如何刪除表中的數(shù)據(jù)

    MySQL如何刪除表中的數(shù)據(jù)

    這篇文章主要介紹了MySQL如何刪除表中的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySQL max_allowed_packet的坑

    MySQL max_allowed_packet的坑

    max_allowed_packet是 MySQL 中的一個設(shè)定參數(shù),用于設(shè)定所接受的包的大小,根據(jù)情形不同,其缺省值可能是 1M 或者 4M,本文主要介紹了MySQL max_allowed_packet的坑,感興趣的可以了解一下
    2024-01-01
  • Mysql中json類型查詢方法示例

    Mysql中json類型查詢方法示例

    這篇文章主要給大家介紹了關(guān)于Mysql中json類型查詢的相關(guān)資料,在MySQL中可以使用一些函數(shù)和操作符來查詢JSON字段,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • MySQL Left JOIN時指定NULL列返回特定值詳解

    MySQL Left JOIN時指定NULL列返回特定值詳解

    我們有時會有這樣的應(yīng)用,需要在sql的left join時,需要使值為NULL的列不返回NULL而時某個特定的值,比如0。這個時候,用is_null(field,0)是行不通的,會報錯的,可以用ifnull實(shí)現(xiàn),但是COALESE似乎更符合標(biāo)準(zhǔn)
    2013-07-07
  • Linux下MYSQL 5.7 找回root密碼的問題(親測可用)

    Linux下MYSQL 5.7 找回root密碼的問題(親測可用)

    這篇文章主要介紹了Linux下MYSQL 5.7 找回root密碼的問題(親測可用),通過 --skip-grant-tables 找回,新增完成后,:wq 保存退出,重啟mysqld服務(wù),具體內(nèi)容詳情跟隨小編一起看看吧
    2021-10-10
  • MySQL創(chuàng)建和刪除數(shù)據(jù)表的命令及語法詳解

    MySQL創(chuàng)建和刪除數(shù)據(jù)表的命令及語法詳解

    這篇文章主要介紹了MySQL創(chuàng)建和刪除數(shù)據(jù)表的命令及語法,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • MySQL合并查詢結(jié)果的實(shí)現(xiàn)

    MySQL合并查詢結(jié)果的實(shí)現(xiàn)

    本文主要介紹了MySQL合并查詢結(jié)果的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評論

绍兴县| 安陆市| 疏附县| 洞口县| 合阳县| 乌审旗| 绥棱县| 河源市| 府谷县| 陇西县| 刚察县| 余江县| 铜鼓县| 莆田市| 赣榆县| 富锦市| 巨鹿县| 邢台市| 新乐市| 应用必备| 济南市| 浙江省| 武平县| 太和县| 高淳县| 同心县| 汨罗市| 铜山县| 灵武市| 通海县| 四平市| 波密县| 玉林市| 南京市| 谢通门县| 广汉市| 玉环县| 会宁县| 驻马店市| 西青区| 吴川市|