当数据量较大时,如上百万甚至上千万记录时,向MySQL数据库中导入数据一般是一个比较费时的过程。一般能够采起如下方法来加速这一过程: 数据库
1、对于Myisam类型的表,能够经过如下方式快速的导入大量的数据。
ALTER TABLE tblname DISABLE KEYS;
loading the data
ALTER TABLE tblname ENABLE KEYS;
这两个命令用来打开或者关闭Myisam表非惟一索引的更新。在导入大量的数据到一个非空的Myisam表时,经过设置这两个命令,能够提升导入的效率。对于导入大量数据到一个空的Myisam表,默认就是先导入数据而后才建立索引的,因此不用进行设置。 大数据
2、对于Innodb类型的表,有如下几种方式能够提升导入的效率:
①由于Innodb类型的表是按照主键的顺序保存的,因此将导入的数据按照主键的顺序排列,能够有效的提升导入数据的效率。若是Innodb表没有主键,那么系统会默认建立一个内部列做为主键,因此若是能够给表建立一个主键,将能够利用这个优点提升导入数据的效率。 spa
②在导入数据前执行SET UNIQUE_CHECKS=0,关闭惟一性校验,在导入结束后执行SET UNIQUE_CHECKS=1,恢复惟一性校验,能够提升导入的效率。 orm
③若是应用使用自动提交的方式,建议在导入前执行SET AUTOCOMMIT=0,关闭自动提交,导入结束后再执行SET AUTOCOMMIT=1,打开自动提交,也能够提升导入的效率。 索引
WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响。如:
Select * from zl_yhjbqk where dy_dj = '1KV如下' and xh_bz=1
Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1KV如下'
以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,因此执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV如下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此能够得出第二条SQL的CPU占用率明显比第一条低。
io
若是想知道MySQL数据库中每一个表占用的空间、表记录的行数的话,能够打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是: form
TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小 效率
其余字段请参考MySQL的手册,咱们只须要了解这几个就足够了。 方法
因此要知道一个表占用空间的大小,那就至关因而 数据大小 + 索引大小 便可。 数据
SQL:
SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名'