mysql-sq优化-插入优化

/*
* 常用sql的优化
*/

--1:大批量导入数据
--myisam 表:
ALTER table tanname DISABLED KEYS;
LOAD the DATA
ALTER TABLE tabname ENABLE KEYS;

--innodb 表
--1 因为innodb类型表示按照主键的顺序来保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高数据的效率
--2 在执行导入数据时候 set unique_checks =0 关闭唯一性效验
在导入结束后打开唯一性效验 set unique_checks = 1 恢复唯一性效验, 可以提高导入效率
--3 在执行导入数据时候 set autocommit = 0
导入结束后 打开set autocommit = 1 关闭自动提交


--2: 优化insert语句
--1:如果是同一个客户端 那么可以使用一下语句 insert into tabname values(1,x),(2,x),(3,x) ...
这种方式大大缩减客户端和数据库之间的链接,关闭的消耗 。使得效率比当个插入的效率快
--2:如果是不同的客户端 那么可以通过使用 insert delayed 语句得到更快的速度.
delayed 的含义是让 insert 语句马上执行, 其实数据都是存在内存的队列中的,并没有真正的写入磁盘,
这笔每条语句分别插入要快的多-- low_priopity 刚刚相反,是在所有用户对表的读写完毕之后才进行插入
--3: 索引文件和数据文件不在同一个磁盘上存放
--4: 如果是批量插入 那么可以增加 bulk_insert_buffer_size 变量值的方法来提升 (myisam有用)
--5: 当从一个文件中载入一个表示 那么使用 load data infile 要比insert 快20倍

tags: Mysql