在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Mysql 中怎么优化insert性能

103次阅读
没有评论

共计 1914 个字符,预计需要花费 5 分钟才能阅读完成。

本篇文章为大家展示了 Mysql 中怎么优化 insert 性能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Mysql 优化之加速 INSERT 插入一条记录花费的时间由以下几个因素决定,数字表示影响的比例:
 
连接:(3)
 
发送查询给服务器:(2)
 
解析查询:(2)
 
插入记录:(1* 记录大小)
 
插入索引:(1* 索引数量)
 
关闭:(1)
 
此处没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次。
 
如果是 B -tree 索引,随着索引数量的增加,插入记录的速度以 logN 的比例下降。
 
可以用以下几种方法来提高插入速度:
 
如果要在同一个客户端在同一时间内插入很多记录,可以使用 INSERT 语句附带有多个 values 值。这种做法比使用单一值的 INSERT 语句快多了(在一些情况下比较快)。如果是往一个非空数据表增加记录,可以调整变量 bulk_insert_buffer_size 的值使其更快。
 
如果要从不用的客户端插入大量记录,使用 INSERT DELAYED 语句也可以提高速度。
 
对应 MyISAM,可以在 SELECT 语句正在运行时插入记录,只要这时候没有正在删除记录。
 
想要将一个文本文件加载到数据表中,可以使用 LOAD DATA INFILE。这通常是使用大量 INSERT 语句的 20 倍。
 
通过一些额外工作,就可以让 LOAD DATA INFILE 在数据表有大量索引的情况下运行更快。步骤如下:
 
用 create table 随表建一个表
 
执行 FLUSH TABLES 语句或 admin flush-tables 命令
 
执行 myisamchk ndash;keys-used=0 -rq /path/to/db/tbl_name 命令,删除数据表所有索引。
 
执行 LOAD DATA INFILE,数据插入到表中,由于无需更新表索引,因此这将非常快。
 
如果将来只是读取该表,运行 myisampack 让数据表更小。
 
运行 myisamchk -r -q /path/to/db/tbl_name 重建索引。创建的索引树在写入磁盘前先保存在内存中,这省去了磁盘磁盘搜索,因此速度快很多。重建后的索引树分布非常均衡。
 
执行 FLUSH TABLES 语句或 mysqladmin flush-tables 命令
 
注意,在 Mysql 4.0 起,可以运行 ALTER TABLE tbl_name DISABLE KEYS 来代替 myisamchk ndash;keys-used=0 -rq /path/to/db/tbl_name. 运行 ALTER TABLE tbl_name ENABLE KEYS 代替 myisamchk -r -q /path/to/db/tbl_name. 这么做就可以省去 FLUSH TABLES 步骤。
 
 
 
可以在锁表后,一起执行几个语句来加速 INSERT 操作:
 
LOCK TABLES a WRITE;
 
INSERT INTO a VALUES(1,23),(2,23);
 
INSERT INTO a VALUES(8,7);
 
UNLOCK TABLES;
 
这对性能提高的好处在于:直到所有的 INSERT 语句都完成之后,索引缓存一次性刷新到磁盘中。通常情况下,有多少次 INSERT 语句就会有多少次索引缓存刷新到磁盘中的开销。如果能在一个语句中一次性插入多个值的话,显然锁表操作也没有必要了。对于事务表而言,用 BEGIN/COMMIT 代替 LOCK TABLES 来提高速度。锁表也会降低多次连接测试的总时间,尽管每个独立连接为了等待锁的最大等待时间也会增加。
 
Connection 1 does 1000 inserts
 
Connection 2,3 and 4 do 1 insert
 
Connection 5 does 1000 inserts
 
如果没有锁表,则连接 2,3,4 会在 1,5 之前完成。如果锁表了,则连接 2,3,4 可能在 1,5 之后才能完成,但总时间可能只需要 40%。Mysql 的 INSERT、UPDATE、DELETE 操作都非常快,不过在一个语句中如果超过 5 个插入或者更新时最好加锁以得到更好的性能。如果要一次性做很多次插入,最好在每个循环的前后加上 LOCK TABLES 和 UNLOCK TABLES,从而让其他进程也能访问数据表;这么做性能依然不错。INSERT 总比 LOAD DATA INFILE 插入数据慢,因为二者实现策略有分明的不同。
 
想要 MyISAM 表更快,在 LOAD DATA INFILE 和 INSERT 时都可以增加系统变量 key_buffer_size 的值。
 

上述内容就是 Mysql 中怎么优化 insert 性能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计1914字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产精品系列在线一区 | 老熟女重囗味hdxx70星空 | 国产无遮挡aaa片爽爽 | 亚洲日韩一区二区三区 | 亚洲字幕av一区二区三区四区 | 国产丰满美女a级毛片 | 精品久久久久久国产91 | 日韩精品亚洲一级在线观看 | 一级毛片在线免费播放 | 成人www视频网站免费观看 | 久久亚洲美女久久久久 | 无码乱肉视频免费大全合集 | 亚洲欧美色图 | 91精品国产闺蜜国产在线闺蜜 | 国产无卡一级毛片aaa | 毛片免费全部播放一级 | 精品国产乱码久久久久久婷婷 | 国产精品_国产精品_k频道w | 亚洲欧美高清 | 精品人妻无码一区二区三区抖音 | 久久精品无码一区二区三区免费 | 欧美黄色大片免费观看 | 富二代 琪琪在线观看 | 特黄aaaaaaaaa及毛片 | 欧洲成人免费高清视频 | 日日碰狠狠躁久久躁96avv | 人人爽人人爽人人片av | 亚洲一区二区三区免费在线观看 | 国产精品亚洲精品日韩动图 | 99久久国产综合精品网成人影院 | 欧美 亚洲 另类 热图 | 亚洲欧美四级在线播放 | 中文字幕无码视频手机免费看 | 中国一级淫片 | 青青青青久久久久国产 | 欧美性狂猛bbbbbxxxxx | 国产又色又爽又黄又免费 | 日本免费视频在在线观看黄 | a一级毛片视频免费看 | 亚洲av人人澡人人爽人人夜夜 | 国产一级久久久久久毛片 |