玖叶教程网

前端编程开发入门

实战应用:Mysql的3个优化(Insert、order及存储引擎下的load)

(1)两种数据存储引擎下,mysql导入大量数据时的优化策略

1)mysql的存储引擎是MyISAM时,可以通过以下方式进行优化load数据的效率

补充:当表时非空时,效率提升较明显

第一步:在执行load语句之前先执行如下语句(关闭非唯一索引的更新):

ALTER TABLE tbl_name DISABLE KEYS;

第二步:执行load语句:即执行导入大量数据的语句,比如:

load data infile '/home/test/sqltest.txt' into table test;

第三步:执行如下命令(打开非唯一索引的更新):

ALTER TABLE tbl_name ENABLE KEYS;

2)mysql的存储引擎是InnoDB时,提高load数据,应该注意以下几点:

第一点:尽量保障sql脚本数据是按照主键的顺序进行保存的,这样在一定程度上能保障load的效率

第二点:巧妙利用SET UNIQUE_CHECKS命令,即:

在导入数据之前执行命令(关闭唯一性校验)SET UNIQUE_CHECKS=0

然后导入数据,执行load命令

最后再执行命令(打开唯一性校验)SET UNIQUE_CHECKS=1

(2)以下方式让insert语句变的更快

1)当向同一个id的对象插入很多值是,尽量使用多个值表的insert语句,例如:

insert into testtable values (3,a),(3,b),(3,c),(3,d)

解释:以上语句,将比那次单个插入快很多

2)善于利用load data infile 命令,来讲文本文件中的数据插入到表中,这比多个insert效率快

(3)合理利用索引,优化order by

1)以下几种sql语句可以,建立索引,比如:

select * from table order by key1,key2;

select * from table where key1 = 1; order by key1 desc,key2 desc;

select * from table order by key1 desc,key2 desc;

2)以下几种情况则不适合使用索引,比如:

select * from table order by key1 desc, key2 asc;(order by混合使用asc 和desc)

select * from table where key2 = 4 order by key1;(where和orderbu中的关键字不一样)


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言