(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中的关键字不一样)