MySQL数据库的性能调整

MySQL的性能调整:

insert查询的速度:

插入一个记录的时间由下列组成:

连接:(3)

发送查询给服务器:(2)

分析查询:(2)

插入记录:(1 x 记录大小)

插入索引:(1 x 索引)

关闭:(1)

这里的数字有点与总体时间成正比。这不考虑打开表的初始开销(它为每个并发运行的查询做一次)。

表的大小以N log N (B 树)的速度减慢索引的插入。

加快插入的一些方法:

如果你同时从同一客户插入很多行,使用多个值表的insert语句。这比使用分开insert语句快(在一些情况中几倍)。

如果你从不同客户插入很多行,你能通过使用insert DELAYED语句得到更高的速度。

注意,用MyISAM,如果在表中没有删除的行,能在select:s正在运行的同时插入行。

当从一个文本文件装载一个表时,使用LOAD DATA INFILE。这通常比使用很多insert语句快20倍。当表有很多索引时,有可能多做些工作使得LOAD DATA INFILE更快些。使用下列过程:

有选择地用create TABLE创建表。例如使用mysql或Perl-DBI。

执行FLUSH TABLES,或外壳命令mysqladmin flush-tables。

使用myisamchk --keys-used=0 -rq /path/to/db/tbl_name。这将从表中删除所有索引的使用。

用LOAD DATA INFILE把数据插入到表中,这将不更新任何索引,因此很快。

如果你有myisampack并且想要压缩表,在它上面运行myisampack.

用myisamchk -r -q /path/to/db/tbl_name再创建索引。这将在将它写入磁盘前在内存中创建索引树,并且它更快,因为避免大量磁盘寻道。结果索引树也被完美地平衡。

执行FLUSH TABLES,或外壳命令mysqladmin flush-tables。

这个过程将被构造进在MySQL的某个未来版本的LOAD DATA INFILE。

你可以锁定你的表以加速插入。

mysql> LOCK TABLES a WRITE;mysql> insert INTO a VALUES (1,23),(2,34),(4,33);mysql> insert INTO a VALUES (8,26),(6,29);mysql> UNLOCK TABLES;主要的速度差别是索引缓冲区仅被清洗到磁盘上一次,在所有insert语句完成后。一般有与有不同的insert语句那样夺的索引缓冲区清洗。如果你能用一个单个语句插入所有的行,锁定就不需要。锁定也将降低多连接测试的整体时间,但是对某些线程最大等待时间将上升(因为他们等待锁)。例如:

thread 1 does 1000 insertsthread 2, 3, and 4 does 1 insert

thread 5 does 1000 inserts如果你不使用锁定,2、3和4将在1和5前完成。如果你使用锁定,2、3和4将可能不在1或5前完成,但是整体时间应该快大约40%。因为insert, update和delete操作在MySQL中是很快的,通过为多于大约5次连续不断地插入或更新一行的东西加锁,你将获得更好的整体性能。如果你做很多一行的插入,你可以做一个LOCK TABLES,偶尔随后做一个UNLOCK TABLES(大约每1000行)以允许另外的线程存取表。这仍然将导致获得好的性能。当然,LOAD DATA INFILE对装载数据仍然是更快的。

时间: 2024-09-20 17:35:14

MySQL数据库的性能调整的相关文章

oracle数据库的性能调整

oracle|数据|数据库|性能     oracle是一个高性能数据库软件.用户可以通过参数的调整,达到性能的优化.性能优化主要分为两部分:一是数据库管理员通过对系统参数的调整达到优化的目的,二是开发人员通过对应用程序的优化达到调整的目的. 在此,仅就系统参数的调整进行探讨,而不涉及应用程序的优化.对系统参数的调整,可以分为以下几个部分: (1)调整内存分配 系统全局区(SGA)是一个分配给ORACLE 包含ORACLE 数据库实例控制信息的内存段.SGA的大小对系统性能的影响极大,其缺省参数

Oracle数据库的性能调整与优化方法探析

1 引言 Oracle数据库作为一种具有高可靠性.高安全性.高兼容性的大型关系型数据库,在金融.通信.医 疗.生产制造等行业得到了广泛的应用,已逐渐成为企业信息化建设的重要基础平台.在航天领域中, Oracle数据库应用在人力资源.型号物资.财务及研制过程管理等管理信息系统的同时,还用来存储和管 理大量星上数据.要使Oracle数据库适应应用需求,有效管理和利用信息时代不断产生并急剧膨胀的数据 ,从而更好地支撑业务应用,对Oracle数据库优化显得尤为重要. 在实际应用中,常常会遇到Oracle

MySQL数据库inset性能优化

  我们在使用中MySQL的时候难免会遇到大批量数据inset的情况,通常最简单的方法就是写一个insert,然后通过循环给变量赋值,批量插入数据库:    //save rddform for (int i = 0; i < rddformlist.Count; i++) { string cmdText = "insert into rddform (ID,CreatedTime,ModifiedTime,CreatedBy,ModifiedBy,FormType) values ('

Mysql数据库服务器优化配置

问题描述 Mysql数据库服务器优化配置 25C 实用mysql数据库时发现mysql的默认配置是不太适合进行正式的商务应用的特别是部署在服务器上时完全不能发挥性能请问常用的mysql调优又哪些服务器上怎么配置mysql才合适. ps.服务器是一半的刀片机mysql主要用于邮箱服务. ps.之前出现了如下问题com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received

MySQL 的实时性能监控利器

操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,iostat」等命令工具一样,可以立刻定位OS的性能瓶颈是在IO还是CPU上,所以收集/展示这些性能数据就更为重要,那都有哪些重要的实时性能状态指标可以反应出系统和MySQL数据库的性能负载呢? 目前在Linux跑MySQL是大多数互联网公司的标配,以上图片的性能数据指标项是我认为在Linux,MySQ

mysql数据库优化与mysql在web性能优化

数据库语句:     Ddl(数据定义语言)    alter  create   drop         Dml(数据操作语言)   inset  delete  update       Dtl(数据事务语言)  conmmit  rollback   savepoint       Select       Dcl(数据控制语句) grant赋权限  revoke回收        Mysql数据库优化: 1.  数据库表 要设计合理(符合3NF,有时候也需要适当的逆范式) 2.  Sq

MySQL数据库性能优化之缓存参数优化

在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助. 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO.本文先从

Mysql数据库性能优化一_Mysql

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是

mysql数据库插入速度和读取速度的调整记录_Mysql

(1)提高数据库插入性能中心思想:尽量将数据一次性写入到Data File和减少数据库的checkpoint 操作.这次修改了下面四个配置项: 1)将 innodb_flush_log_at_trx_commit 配置设定为0:按过往经验设定为0,插入速度会有很大提高. 0: Write the log buffer to the log file and flush the log file every second, but do nothing at transaction commit.