高效率地载入数据
在大多数情况下,你所关注的是SELECT查询的优化,因为SELECT查询是最常见的查询类型,而且如何优化它们又不是太简单。与此形成对比,把数据载入数据库的操作就相对直接了。然而,你仍然可以利用某些策略来改善数据载入操作的效率。基本的原理如下所示:
· 批量载入比单行载入的效率高,因为在每条记录被载入后,键缓存(key cache)不用刷新(flush);可以在这批记录的末尾刷新键缓存。键缓存刷新的频率减少得越多,数据载入的速度就越快。
· 没有索引的数据表的载入速度比有索引的要快一些。如果存在索引,不但要把记录添加到数据文件中,还必须修改索引来反映新增的记录。
· 较短的SQL语句比较长的SQL语句快,因为它们所涉及到服务器端分析过程较少,同时通过网络把它们从客户端发送到服务器上的速度也更快。
其中有些因素看起来是次要的(尤其是最后一个),但是如果你载入的数据很多,那么即使很小的效率差异也会导致一定的性能差别。我们可以从前面的一般原理得出几条如何快速载入数据的实践结论:
· LOAD DATA(所有形式的)比INSERT效率高,因为它是批量载入数据行的。服务器只需要分析和解释一条语句,而不是多条语句。同样,索引只需要在所有的数据行被处理过之后才刷新,而不是每行刷新一次。
· 不带LOCAL的LOAD DATA比带有LOCAL的LOAD DATA的速度要快。不带LOCAL的时候,文件必须位于服务器上,而且你必须拥有FILE权限,但是服务器却可以直接从磁盘上读取文件。使用LOAD DATA LOCAL的时候,客户端读取文件并通过网络把它发送给服务器,速度慢一些。
· 如果你必须使用INSERT,那么试着使用在一个语句中指定多个数据行的形式:
| INSERT INTO tbl_name VALUES(...),(...),... ; |
| START TRANSACTION; INSERT INTO tbl_name ... ; INSERT INTO tbl_name ... ; INSERT INTO tbl_name ... ; COMMIT; |
| LOCK TABLES tbl_name WRITE; INSERT INTO tbl_name ... ; INSERT INTO tbl_name ... ; INSERT INTO tbl_name ... ; UNLOCK TABLES; |
上一页 [1] [2] [3] [4] [5] [6] 下一页
![]() | 图解MySQL数据库的安装和操作 | 53815 |
![]() | Mysql数据库操作新手入门,手把手的教会你 | 36326 |
![]() | MySQL入门学习(二)入门篇 | 33066 |
![]() | MySQL入门学习(一)安装篇 | 28468 |
![]() | MY SQL常用命令 | 25482 |
![]() | MySQL入门学习(三)学习篇 | 20922 |
![]() | MySQL入门学习(四)学习篇(2) | 12348 |
![]() | MySQL入门学习(六)修改和备份、批处理 | 8931 |