时间:2021-07-01 10:21:17 帮助过:38人阅读
在导入数据前执行SET UNIQUE_CHECKS=0,关闭唯一性校验,在导入结束后执行SET UNIQUE_CHECKS=1,恢复唯一性校验,可以提高导入的效率。
如果应用使用自动提交的方式,建议在导入前执行SET AUTOCOMMIT=0,关闭自动提交,导入结束后再执行SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。
INSERT INTO MyTable ( Column1, Column2, Column3 ) VALUES (‘John‘, 123, ‘Lloyds Office‘), (‘Jane‘, 124, ‘Lloyds Office‘), (‘Billy‘, 125, ‘London Office‘), (‘Miranda‘, 126, ‘Bristol Office‘);
开启一个事务,批量操作完了才提交事务,而不是,操作一次就提交一次,这样io太高,插入太慢。
注意事项: max_allowed_packet 默认是1M,如何insert values sql 太大需要上调这个值
MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。
order by满足两种情况会使用Using index:
因为当查询字段过多时,会导致sort_buffer不够,从而使用多路排序或进行多次I/O操作
尝试提高sort_buffer_size;
尝试提高max_length_for_sort_data
在MySQL4.1之前使用双路排序,就是两次磁盘扫描,得到最终数据。读取行指针和order by列,对他们进行排序,然后扫描已经排好序的列表,按照列表中的值重新从列表中读取对应的数据输出。
即从磁盘读取排序字段,在buffer进行排序,再从磁盘取其他字段。
从磁盘中查询所需的列,按照order by列在buffer中对它们进行排序,然后扫描排序后的列表进行输出。它的效率更高一些,避免了第二次读取数据,并且把随机I/O变成了顺序I/O,但是会使用更多的空间,因为它把每一行都保存在内存中了。
当读取数据超过sort_buffer的容量时,就会导致多次读取数据,并创建临时表,最后多路合并,产生多次I/O,反而增加其I/O运算。
mysql - SQL 优化小结
标签:rgb span sql 建议 table where 根据 解决办法 支持