Java 在MySQL表中插入多行
我的表格如下:Java 在MySQL表中插入多行,java,mysql,sql,performance,Java,Mysql,Sql,Performance,我的表格如下: CREATE TABLE IF NOT EXISTS mytable ( `id` INT(22) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `uuid` VARCHAR(255) NOT NULL, `x` INT(11) NOT NULL, `y` INT(11) NOT NULL, `z` INT(11) NOT NULL, `time` BIGINT NOT NULL,
CREATE TABLE IF NOT EXISTS mytable (
`id` INT(22) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`uuid` VARCHAR(255) NOT NULL,
`x` INT(11) NOT NULL,
`y` INT(11) NOT NULL,
`z` INT(11) NOT NULL,
`time` BIGINT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY idx_table_x_y_z ( x, y, z )
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
现在,我想在max
和min
值之间为x
、y
和z
的每个组合添加一行。我该怎么做
在java中,我将在xmin
和xmax
之间循环x
的每个值,在ymin
和ymax
之间循环y
,在zmin
和zmax
之间循环z
,然后用这些值和uuid
和name
发送一个查询,但对于10k查询,这需要大量的资源
有没有办法让MySQL服务器在内部执行此操作
PS:我在插入行时使用REPLACE-INTO
语法以避免重复
编辑:
这正是java的替代方案:
for(int x = xMin; x < xMax; x++) {
for(int y = yMin; x < yMax; y++) {
for(int z = zMin; x < zMax; z++) {
try {
SH.getManager().getMysqlManager().query(
"REPLACE INTO blocks_" + type.name + "_" + b.getWorld().getName() + "("
+ "name, uuid, x, y, z, time) "
+ "VALUES ( "
+ "'" + name + "', '" + uuid + "', " + x + ", " + y + ", " + z + ", " + System.currentTimeMillis() + " "
+ ");");
} catch (final SQLException e) {
e.printStackTrace();
}
}
}
}
for(int x=xMin;x
我想使用mysql服务器而不是java来执行循环以节省I/o时间。这就是您想要的吗
insert into mytable(name, uuid, . . .)
select name, uuid, . . .
from mytable
where x between $xmin and $xmax and
y between $ymin and $ymax;
如果是这样的问题,那么您只需要一个查询,只需要正确的条件。我如何改进我的问题?就这样做吧。10k查询的执行速度应该相当快,所以没有办法更快吗?这会占用太多的时间来运行sync,如果服务器可以在内部执行此操作,那么异步运行sync似乎有点浪费@JBNizet@l0lkj . . . 您可以通过提供示例数据和所需结果来改进查询。“为世界上一个正方形内的每个块添加一行”这句话在上下文之外真的没有意义。比什么快?您需要执行多少次该数据库填充?你有什么时间要求?你有没有试过用你能想象的最简单的方法来做这件事?这不应该超过几秒钟。太慢了吗?