`
kavy
  • 浏览: 891428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Mysql insert性能优化

 
阅读更多
Mysql insert性能优化
2012-02-20 16:41:15     我来说两句      
收藏    我要投稿
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语句或mysqladmin flush-tables命令
 
执行myisamchk –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 –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数据库性能优化pdf.pdf

    特别是在涉及JavaEE技术栈的应用开发时,对MySQL数据库的性能优化更是面试中的高频问题。这篇文章将详细讨论MySQL数据库性能优化的相关知识点,这不仅是Java面试的热点,也是每一位数据库管理员和开发人员应该掌握的...

    MySql5.6性能优化1

    MySQL 5.6性能优化是数据库管理中至关重要的一环,其目标在于提升系统运行效率,减少资源消耗,增强系统的响应速度。优化不仅涉及查询层面,还包括数据库结构的优化以及MySQL服务器本身的调整。以下将详细讨论这些...

    mysql性能优化与诊断

    ### MySQL性能优化与诊断 #### 一、MySQL存储引擎对比:MyISAM vs InnoDB 在MySQL中,MyISAM和InnoDB是最常用的两种存储引擎。对于不同的应用场景,选择合适的存储引擎至关重要。以下是对这两种存储引擎的主要特点...

    MySQL优化insert性能的方法示例

    MySQL性能优化 MySQL性能优化就是通过合理安排资源,调整系统参数使MySQL运行更快、更节省资源。MySQL性能优化包括查询速度优化、更新速度优化、MySQL服务器优化等。本篇博客将从查询优化、数据库结构优化、MySQL...

    mysql性能优化

    MySQL性能优化是数据库管理中的关键环节,它直接影响到应用程序的响应速度和整体系统效率。以下是一些关于MySQL性能优化的重要知识点: 1. **索引优化**:索引是提升查询速度的关键,合理创建主键、唯一索引和普通...

    MySQL性能优化权威指南

    MySQL性能优化是一门深奥的技术,旨在通过调整和调整数据库的配置参数,来提高数据库的性能和效率。《MySQL性能优化权威指南》这本书深入地介绍了如何在实际应用中实现MySQL性能的优化。本书详细讲述了数据库连接池...

    MySql5.6性能优化.docx

    ### MySQL 5.6 性能优化 #### 目标 - **理解优化的概念:** 学习如何通过合理配置资源以及调整系统参数来提升 MySQL 的运行效率,并降低资源消耗。 - **掌握查询优化技巧:** 掌握一系列实用方法和技术来改善 SQL ...

    Mysql5.6性能优化

    ### MySQL 5.6 性能优化 #### 目标 - **理解优化的概念:** 首先明确什么是优化,即如何通过合理地分配资源和调整系统参数来提升MySQL的运行速度,同时减少资源消耗。 - **掌握查询优化方法:** 学习并运用各种...

    基于MySQL数据库的查询性能优化研究.pdf

    基于 MySQL 数据库的查询性能优化研究 MySQL 数据库是当前网络环境中最流行的开源关系型数据库之一,随着网络环境中数据总量的急剧攀升,对数据库查询的响应时间提出了更严格的要求。为了提高查询效率,需要研究 ...

    如何优化MySQL insert性能

    在优化MySQL的INSERT性能时,面对大量数据的系统,我们需要考虑如何有效地减少插入时间,以降低潜在的风险和提高系统的稳定性。以下是一些经过测试的有效策略: 1. **批量插入**: - 传统的方式是逐行插入数据,...

    mysql介绍和性能优化.rar

    本教程将深入探讨MySQL的基本概念、安装配置、操作语法以及性能优化策略。 一、MySQL基本概念 1. 数据库:存储数据的容器,可以包含多个表。 2. 表:数据的二维结构,由列和行组成。 3. 列:定义表中的字段,每个...

    mysql insert锁机制1

    MySQL的Insert锁机制是数据库管理系统中确保数据一致性和并发控制的重要组成部分。在MySQL的InnoDB存储引擎中,插入操作不仅涉及到行级锁,还可能涉及Gap锁和Next-Key Locks,这些锁机制的设计是为了防止幻读...

    MySql性能优化集合--满满的干货

    ### MySQL性能优化集合 #### 一、MySQL优化概述 MySQL作为一种广泛使用的开源关系型数据库管理系统,在数据处理方面表现优秀。然而,在高并发、大数据量的情况下,可能会遇到性能瓶颈。因此,进行MySQL性能优化是...

    mysql数据库sql优化

    ### MySQL数据库SQL优化 #### 一、SQL优化 在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 ...

    MySQL介绍和优化分享

    本分享将深入探讨MySQL的性能优化策略以及关键参数设置,帮助你提升数据库的运行效率。 一、MySQL基础介绍 MySQL基于SQL标准,支持多种操作系统,包括Windows、Linux和Unix等。它的核心特性包括事务处理、存储过程...

    从以下维度进行MySQL性能优化所谓的性能优化

    MySQL性能优化是一个复杂而系统的过程,它涉及到多个维度和层面,旨在提高数据库的响应速度,降低资源消耗,提升系统的整体效率。以下是从标题和描述中提取的几个关键知识点,并进行了详细的阐述。 一、SQL查询优化...

    MySQL性能优化方案总结1

    MySQL性能优化是一个涵盖多方面的主题,涉及到数据库设计、SQL语句、索引策略、服务器配置、存储引擎以及硬件层面的优化。以下是对标题和描述中所提及的各个优化方案的详细说明: 1. **SQL 和索引优化** - **SQL ...

    MySQL从入门到实战学习教程之15性能优化.pptx

    MySQL性能优化 MySQL性能优化是数据库管理员和开发人员需要掌握的重要技能。随着应用系统的不断增长,数据库的性能问题逐渐凸显,影响整个系统的响应速度。因此,了解 MySQL 的性能优化技巧对于确保数据库的平稳...

    MySQL性能优化的21个最佳实践.zip

    MySQL性能优化是数据库管理员和开发者的必修课,它涵盖了多个方面,包括查询优化、索引策略、存储引擎选择、数据库架构设计等。以下是对"MySQL性能优化的21个最佳实践"的详细阐述: 1. **查询优化**:编写高效的SQL...

Global site tag (gtag.js) - Google Analytics