当前位置:首页 > 编程开发

Eclipse 操作MySQL数据

webgou17年前 (2009-10-10)编程开发322


下面是MySQL 5.1参考手册里给的一些说法:

INSERT语句的速度
插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例:
连接:(3)
发送查询给服务器:(2)
分析查询:(2)
插入记录:(1x记录大小)
插入索引:(1x索引)
关闭:(1)

这不考虑打开表的初始开销,每个并发运行的查询打开。
表的大小以logN (B树)的速度减慢索引的插入。


加快插入的一些方法:
• 如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行。这比使用单行INSERT语句快(在某些情况下快几倍)。如果你正向一个非空表添加数据,可以调节bulk_insert_buffer_size变量,使数据插入更快。参见5.3.3节,“服务器系统变量”。
• 如果你从不同的客户端插入很多行,能通过INSERT DELAYED语句加快速度。参见13.2.4节,“INSERT语法”。
• 用MyISAM,如果在表中没有删除的行,能在SELECT语句正在运行的同时插入行。
• 当从一个文本文件装载一个表时,使用LOAD DATA INFILE。这通常比使用很多INSERT语句快20倍。参见13.2.5节,“LOAD DATA INFILE语法”。
• 当表有很多索引时,有可能要多做些工作使得LOAD DATA INFILE更快些。使用下列过程:
有选择地用CREATE TABLE创建表。
执行FLUSH TABLES语句或命令mysqladmin flush-tables。
使用myisamchk --keys-used=0 -rq /path/to/db/tbl_name。这将从表中取消所有索引的使用。
用LOAD DATA INFILE把数据插入到表中,因为不更新任何索引,因此很快。
如果只想在以后读取表,使用myisampack压缩它。参见15.1.3.3节,“压缩表特性”。
用myisamchk -r -q /path/to/db/tbl_name重新创建索引。这将在写入磁盘前在内存中创建索引树,并且它更快,因为避免了大量磁盘搜索。结果索引树也被完美地平衡。
执行FLUSH TABLES语句或mysqladmin flush-tables命令。
请注意如果插入一个空MyISAM表,LOAD DATA INFILE也可以执行前面的优化;主要不同处是可以让myisamchk为创建索引分配更多的临时内存,比执行LOAD DATA INFILE语句时为服务器重新创建索引分配得要多。
也可以使用ALTER TABLE tbl_name DISABLE KEYS代替myisamchk --keys-used=0 -rq /path/to/db/tbl_name,使用ALTER TABLE tbl_name ENABLE KEYS代替myisamchk -r -q /path/to/db/tbl_name。使用这种方式,还可以跳过FLUSH TABLES。

• 锁定表可以加速用多个语句执行的INSERT操作:
LOCK TABLES a WRITE;
INSERT INTO a VALUES (1,23),(2,34),(4,33);
INSERT INTO a VALUES (8,26),(6,29);
UNLOCK TABLES;
这样性能会提高,因为索引缓存区仅在所有INSERT语句完成后刷新到磁盘上一次。一般有多少INSERT语句即有多少索引缓存区刷新。如果能用一个语句插入所有的行,就不需要锁定。
对于事务表,应使用BEGIN和COMMIT代替LOCK TABLES来加快插入。

锁定也将降低多连接测试的整体时间,尽管因为它们等候锁定最大等待时间将上升。例如:
Connection 1 does 1000 inserts
Connections 2, 3, and 4 do 1 insert
Connection 5 does 1000 inserts
如果不使用锁定,2、3和4将在1和5前完成。如果使用锁定,2、3和4将可能不在1或5前完成,但是整体时间应该快大约40%。

INSERT、UPDATE和DELETE操作在MySQL中是很快的,通过为在一行中多于大约5次连续不断地插入或更新的操作加锁,可以获得更好的整体性能。如果在一行中进行多次插入,可以执行LOCK TABLES,随后立即执行UNLOCK TABLES(大约每1000行)以允许其它的线程访问表。这也会获得好的性能。
INSERT装载数据比LOAD DATA INFILE要慢得多,即使是使用上述的策略。
• 为了对LOAD DATA INFILE和INSERT在MyISAM表得到更快的速度,通过增加key_buffer_size系统变量来扩大 键高速缓冲区。参见7.5.2节,“调节服务器参数”。

createStatement
Statement createStatement()
  throws SQLException
创建一个 Statement 对象来将 SQL 语句发送到数据库。没有参数的 SQL 语句通常使用 Statement 对象执行。如果多次执行相同的 SQL 语句,使用 PreparedStatement 对象可能更有效。

使用返回的 Statement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。

返回:
一个新的默认 Statement 对象
抛出:
SQLException - 如果发生数据库访问错误

prepareStatement
PreparedStatement prepareStatement(String sql)
  throws SQLException
创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

带有 IN 参数或不带有 IN 参数的 SQL 语句都可以被预编译并存储在 PreparedStatement 对象中。然后可以有效地使用此对象来多次执行该语句。

注:为了处理受益于预编译的带参数 SQL 语句,此方法进行了优化。如果驱动程序支持预编译,则 prepareStatement 方法会将该语句发送给数据库进行预编译。一些驱动程序可能不支持预编译。在这种情况下,执行 PreparedStatement 对象之前无法将语句发送给数据库。这对用户没有直接的影响;但它的确会影响抛出某些 SQLException 对象的方法。

使用返回的 PreparedStatement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。

参数:
sql - 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句
返回:
包含预编译的 SQL 语句的新的默认 PreparedStatement 对象
抛出:
SQLException - 如果发生数据库访问错误 

[from:http://www.cnblogs.com/chutianyao/archive/2008/09/11/1289002.html]

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=23

标签: mysql
分享给朋友:

“Eclipse 操作MySQL数据” 的相关文章

Java基础 三步学会Java Socket编程(三)

http://java.ccidnet.com/art/3539/20070606/1103881_1.html第三步 实现信息共享:在Socket上的实时交流网络的伟大之一也是信息共享,Server可以主动向所有Client广播消息,同时Client也可以向其它Client发布消息。下面看看如何开…

WinCE下自定义Shell的方法

考虑到产品外观及风格的一致性,无法直接把Explorer作为Shell,而且,又无简单的把Explorer直接放到后台(会出现一些问题,譬如启动的瞬间,Explorer会显示一下)方法:1. 直接修改Explorer,改为自己的风格。个人认为这是最根本最有效的方法,但是工作量比较大,考虑到时间只能放…

增加标题栏按钮

增加标题栏按钮: 1.创建GUID,用GUDI工具创建. 2.增加一个键值,键名为刚创建好的GUID HKEY_LOCAL_MACHINE/Software/Microsoft/Internet Explorer/Extensions/{GUID} 3.增加图标,名称 ButtonText - 按钮…

Mac电脑安装OpenClaw教程

 自2026年1月起,一款名为OpenClaw(网友俗称“小龙虾”)的开源AI智能体在国内外社交媒体爆火,并衍生出收费安装服务。北京、上海、深圳等地的不少企业放出了“OpenClaw开发工程师”等岗位,其要求不限于“熟悉OpenC…

Android拍照实现方式概述

编程人员在Android手机操作系统中可以实现许多功能来满足各种用户不同的需求。比如我们以前介绍的通话监控功能等。在这里就先来为大家详细介绍一下有关Android拍照的实现方法。Android拍照有两种方式,一是使用android.hardware.Camera,二是使用 Intent("…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。