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 . . . 您可以通过提供示例数据和所需结果来改进查询。“为世界上一个正方形内的每个块添加一行”这句话在上下文之外真的没有意义。比什么快?您需要执行多少次该数据库填充?你有什么时间要求?你有没有试过用你能想象的最简单的方法来做这件事?这不应该超过几秒钟。太慢了吗?