`
snake_hand
  • 浏览: 624981 次
社区版块
存档分类
最新评论

怎么提高Mysql执行sql导入的速度

 
阅读更多

怎么提高Mysql执行sql导入的速度

1、如果mysql的data数据很少,内存足够大,可以把data防止到内存盘中。

linux如下设置内存盘:

mount -t ramfs none /ram

默认使用内存一半

如果内存不够大,系统有多个硬盘,则把mysql应用程序和data目录分开到不同硬盘上。

2、mysql的表设置为myiasm,比同等条件下的innodb能快20倍以上

3、导入完成以后才创建数据库索引

4、导入完成以后根据需要转换为其他engine,比如innodb

5、多条数据插入一个表,可以使用多记录方式:

insert into tablename values(’xxx’,'xxx’),(’yyy’,'yyy’)…;

6、如果多个mysql执行导入,可以使用delayed

insert delayed into tablename values(’sss’,’ssss’);

7、大文件sql文件可以用split分成多份再导

8、同等条件下,redhat比ubuntu强很多(几乎肯定)

9 性能调整技巧(Performance tuning tips)

1. 如果 Unix top 或 Windows 任务管理器(Task Manager) 显示服务的 CPU 占用率小于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)你的系统瓶颈可能在磁盘读写上。或许你提交了大量的事务,或者是缓冲池(buffer pool)太小了。将缓冲池设大点会有所帮助,但一定要注意不能大于物理内存的 80%。

2. 在一个事务中包含几个修改。如果事务对数据库进行了修改,那么在这个事务提交时 InnoDB 必须刷新日志到磁盘上。因为硬盘的旋转速度通常至多为 167 转/秒,那么只要磁盘不欺骗操作系统,提交的事务数目限止也同样为 167 次/秒·用户。

3. 如果掉失最近的几个事务无所谓的话,可以在 my.cnf 文件中将参数 innodb_flush_log_at_trx_commit 设置为 0。InnoDB 无论如何总是尝试一秒刷新(flush)一次日志,尽管刷新并不能得到保证。

4. 将日志文件(log files)设大一点,使日志文件的总和正好与缓冲池(buffer pool)一样大。当 InnoDB 用光日志文件的空间时,它不得不在一个时间点上将缓冲池内修改过的内容写到磁盘上。 小的日志文件可能引起不必要的磁盘写操作。但是大的日志文件的缺点就是在数据恢复时将占用较长的时间。

5. 同样 log buffer 尽量设大点,比如说 8 MB。
6. 如果要存储变长的字符串或字段可能会包含大量的 NULLs,请使用 VARCHAR 型字段代替 CHAR 。一个 CHAR(n) 字段总是使用 n bytes 来存储数据,即使这个字符串很短或是一个 NULL 值。较小的表更加适合缓冲池同时能够减少磁盘 I/O 。

7. (适合从 3.23.41 以上版本) 在某些版本的 Linux 和 Unixes 中,使用 Unix fsync 或其它类似的方法将文件刷新到磁盘是异常地慢的。InnoDB 默认的方法就是 fsync 。如果你对数据库系统的磁盘写性能不能感到满意,你可以尝试在 my.cnf 中将 innodb_flush_method 设置为 O_DSYNC,尽管 O_DSYNC 选项在多数的系统上看起来比较慢。

8. 在向 InnoDB 导入数据时,请确认 MySQL 没有打开 autocommit=1 。否则每个插入语句都要将 log 刷新到磁盘。在你的 SQL 导入文件的第一行加入

set autocommit=0;

并在最后一行加入

commit;

如果使用 mysqldump 选项 –opt,你将会得到一个快速导入 InnoDB 表的转储(dump)文件,甚至可以不再使用上面所提的 set autocommit=0; … commit; 。

9. 小心 insert 集全的大回滚(roolback):在插入时 InnoDB 使用插入缓冲来减少磁盘 I/O,但在相应的回滚中却没有使用这样的机制。一个 disk-bound rollback 可能会花费相应插入时间的 30 倍。如果发生一个失控的回滚,你可以查看第 6.1 章节的技巧来停止它。

10. 同样也要小心一个大的 disk-bound 的操作。使用 Drop TABLE 或 TRUNCATE (从 MySQL-4.0 以上) 来清空一个表,而不要使用 Delete FROM yourtable。

11. 如果需要插入大量记录行可以使用多行(multi-line)的 Insert 来减少客户端与服务器端的通信开销:

Insert INTO yourtable VALUES (1, 2), (5, 5);

这个技巧对插入任何表均有效,而不仅仅是 InnoDB。

12. 如果在辅键上有 UNIQUE 约束,从 3.23.52 和 4.0.3 开始,可以通过在一个导入会话中将唯一键检查(uniqueness check)关闭来提高数据导入速度:

SET UNIQUE_CHECKS=0;

一个大的表导入这将减少大量的磁盘 I/O,因为这时 InnoDB 可能使用自身的插入缓冲来分批地记录辅助索引。

13. 如果在表中有一个子 FOREIGN KEY 约束,从 3.23.52 和 4.0.3 开始,可以通过在一个导入会话中将外键检查(foreign key check)关闭来提高数据导入速度:

SET FOREIGN_KEY_CHECKS=0;

对一个大的表导入这将减少大量的磁盘 I/O。

转载声明:本文转自http://hi.baidu.com/ssnh1379/blog/item/26733a1e12468103314e1579.html

====================================================================

分享到:
评论

相关推荐

    MySQL导入sql脚本错误:2006 解决方法

    MySQL导入sql脚本错误:2006 – MySQL server has gone away 到如一些小脚本很少报错,但最近导入一个10+M的SQL脚本,却重复报错: Error occured at:2014-03-24 11:42:24 Line no.:85 Error Code: 2006 - MySQL ...

    navicat for mysql执行sql脚本细节

    ### Navicat for MySQL执行SQL脚本细节 #### 一、引言 在数据库管理和开发过程中,使用图形化工具能够极大地提升工作效率。Navicat for MySQL作为一款强大的MySQL图形化管理工具,在执行SQL脚本方面提供了丰富的...

    MySQL导入.sql文件及常用命令

    MySQL 导入.sql 文件及常用命令 MySQL 是一种关系型数据库管理系统,广泛应用于 Web 应用程序中。 MySQL 中有多种方式可以导入.sql 文件,并且提供了许多常用命令来管理和维护数据库。 一、导入.sql 文件 在 ...

    mysql导入sql或excel文件

    ### MySQL导入SQL或Excel文件的方法 #### 一、MySQL数据库操作基础 在开始介绍如何将SQL脚本或Excel数据导入MySQL数据库之前,我们先来了解一下MySQL的一些基本操作命令。 ##### 创建数据库 创建一个名为`temp`...

    不进入mysql 就能导入sql脚本的方法

    标题提到的“不进入mysql就能导入sql脚本的方法”是一种提高效率和便利性的技巧,尤其适用于大型数据库或者频繁进行数据迁移的情况。下面我们将详细介绍这个方法以及相关的知识点。 首先,SQL脚本通常包含了创建表...

    ansible执行mysql sql 脚本

    2. **配置主机清单**:创建一个`hosts`文件,列出所有需要执行SQL脚本的目标主机。例如: ``` [mysql_servers] server1.example.com server2.example.com ``` 3. **创建Playbook**:编写一个Ansible Playbook...

    Mysql数据导入到SQLSERVER里面

    标题中的“Mysql数据导入到SQLSERVER里面”指的是一个数据迁移的过程,即将MySQL数据库系统中的数据转移到Microsoft SQL Server数据库系统中。这个过程在数据库管理中很常见,特别是在企业需要更换数据库平台或者...

    MySQL导入sql文件

    ### MySQL导入SQL文件详解 #### 引言 MySQL作为全球广泛使用的开源关系型数据库管理系统,其数据导入导出功能对于数据库管理员来说至关重要。本文将深入探讨如何通过命令行方式在MySQL中导入SQL文件,包括环境配置...

    Oracle Sql语句转换成Mysql Sql语句

    同时,转换后还需要对生成的MySQL SQL进行测试,确保在目标数据库环境中能正常执行。 总的来说,这个工具对于那些需要在Oracle和MySQL之间迁移数据库应用的开发者来说,是一个非常实用的资源。它通过自动化处理减少...

    Mysql执行脚本步骤

    Mysql 执行脚本步骤详解 ...Mysql 执行脚本步骤是一个非常重要的知识点,它可以帮助我们快速地执行 SQL 语句,从而提高工作效率。但需要注意的是,在执行 SQL 脚本文件时,我们需要格外小心,以免出现错误。

    sql server数据导入mysql方案

    【SQL Server数据导入MySQL方案】 数据迁移是数据库管理和运维中的常见任务,特别是在系统升级或整合时。本方案主要探讨如何将SQL Server中的数据迁移到MySQL,涵盖了多种迁移工具和技术,包括Kettle、SqlYong、...

    PowerDesigner连接MySQL互相导入以及显示中文注释

    - 可以通过MySQL客户端执行SQL脚本来实现。 3. **验证导入结果**: - 运行导入操作后,在MySQL数据库中刷新表结构。 - 确认表及其中文注释是否正确导入。 通过以上步骤,您可以顺利完成PowerDesigner与MySQL...

    MySql中执行SQL文件.rar

    在MySQL数据库管理中,执行SQL文件是常见的任务,特别是在数据导入、备份恢复或者数据库初始化时。这个名为"MySql中执行SQL文件.rar"的压缩包很可能包含了一个或多个SQL脚本,用于实现这样的操作。让我们详细了解...

    MySql数据导入SqlServer

    【MySQL数据导入SQL Server详解】 在数据库管理领域,经常需要将数据从一个系统迁移到另一个系统,例如从MySQL数据库迁移到SQL Server。这个过程通常涉及到数据的导出、转换和导入等多个步骤。以下是一个详细的过程...

    Mysql导入导出.sql文件 Word 文档

    本文主要探讨如何在 MySQL 中导入和导出 `.sql` 文件,这对于数据库备份、迁移或复制数据至关重要。 首先,导出 MySQL 数据库为 `.sql` 文件是备份数据库的一种常见方式。例如,如果要将名为 `education` 的数据库...

    Mysql命令行下用source命令导入sql文件

    在MySQL数据库管理中,命令行工具提供了一种高效的方式来执行SQL脚本,特别是当你需要大量数据导入或批量更新时。`source`命令是MySQL客户端中的一个实用功能,它允许我们直接在命令行环境下快速导入`.sql`文件,这...

    用于将大型MySQL转储拆分为可独立执行的小型SQL文件

    这个工具专门设计用于将大型的MySQL转储文件拆分成多个小文件,每个小文件包含可以独立执行的SQL语句,从而提高了数据库操作的效率和灵活性。 SQLDumpSplitter的核心功能是智能分析和分割SQL转储文件。它能够识别...

    mysql 导入导出 sql文件

    ### MySQL导入导出SQL文件详解 #### 一、概述 MySQL作为一款广泛使用的开源关系型数据库管理系统,在数据管理和维护方面提供了强大的支持。其中,数据的导入导出是日常数据库管理中非常重要的环节之一。本文将详细...

    用SQL语句解决mysql导入大数据文件的问题

    3. **执行SQL导入**:使用MySQL命令行客户端,运行如下命令来导入数据: ``` mysql db_name < data_file.sql ``` 其中`db_name`是你的数据库名,`data_file.sql`是你要导入的SQL文件名。确保文件格式正确,避免...

Global site tag (gtag.js) - Google Analytics