Fix delete statements doing a full table scan

This commit is contained in:
Lukas Rieger (Blue) 2024-04-18 15:46:45 +02:00
parent 37dd18190b
commit a6402850c9
No known key found for this signature in database
GPG Key ID: AA33883B1BBA03E6
4 changed files with 32 additions and 95 deletions

View File

@ -113,10 +113,12 @@ public abstract class AbstractCommandSet implements CommandSet {
@Override @Override
public int deleteMapTile(String mapId, int lod, int x, int z, Compression compression) throws IOException { public int deleteMapTile(String mapId, int lod, int x, int z, Compression compression) throws IOException {
int mapKey = mapKey(mapId);
int compressionKey = compressionKey(compression);
return db.run(connection -> { return db.run(connection -> {
return executeUpdate(connection, return executeUpdate(connection,
deleteMapTileStatement(), deleteMapTileStatement(),
mapId, lod, x, z, compression.getKey().getFormatted() mapKey, lod, x, z, compressionKey
); );
}); });
} }
@ -156,10 +158,11 @@ public abstract class AbstractCommandSet implements CommandSet {
@Override @Override
public int purgeMapTiles(String mapId, int limit) throws IOException { public int purgeMapTiles(String mapId, int limit) throws IOException {
int mapKey = mapKey(mapId);
return db.run(connection -> { return db.run(connection -> {
return executeUpdate(connection, return executeUpdate(connection,
purgeMapTilesStatement(), purgeMapTilesStatement(),
mapId, limit mapKey, limit
); );
}); });
} }
@ -230,10 +233,11 @@ public abstract class AbstractCommandSet implements CommandSet {
@Override @Override
public int deleteMapMeta(String mapId, String itemName) throws IOException { public int deleteMapMeta(String mapId, String itemName) throws IOException {
int mapKey = mapKey(mapId);
return db.run(connection -> { return db.run(connection -> {
return executeUpdate(connection, return executeUpdate(connection,
deleteMapMetaStatement(), deleteMapMetaStatement(),
mapId, itemName mapKey, itemName
); );
}); });
} }
@ -265,21 +269,22 @@ public abstract class AbstractCommandSet implements CommandSet {
@Override @Override
public void purgeMap(String mapId) throws IOException { public void purgeMap(String mapId) throws IOException {
synchronized (mapKeys) { synchronized (mapKeys) {
int mapKey = mapKey(mapId);
db.run(connection -> { db.run(connection -> {
executeUpdate(connection, executeUpdate(connection,
purgeMapTileTableStatement(), purgeMapTileTableStatement(),
mapId mapKey
); );
executeUpdate(connection, executeUpdate(connection,
purgeMapMetaTableStatement(), purgeMapMetaTableStatement(),
mapId mapKey
); );
executeUpdate(connection, executeUpdate(connection,
deleteMapStatement(), deleteMapStatement(),
mapId mapKey
); );
}); });

View File

@ -147,19 +147,11 @@ public class MySQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_tile` FROM `bluemap_map_tile`
WHERE `map` IN ( WHERE `map` = ?
SELECT m.`id`
FROM `bluemap_map` m
WHERE m.`map_id` = ?
)
AND `lod` = ? AND `lod` = ?
AND `x` = ? AND `x` = ?
AND `z` = ? AND `z` = ?
AND `compression` IN ( AND `compression` = ?
SELECT c.`id`
FROM `bluemap_map_tile_compression` c
WHERE c.`compression` = ?
)
"""; """;
} }
@ -199,11 +191,7 @@ public class MySQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_tile` FROM `bluemap_map_tile`
WHERE `map` IN ( WHERE `map` = ?
SELECT `id`
FROM `bluemap_map`
WHERE `map_id` = ?
)
LIMIT ? LIMIT ?
"""; """;
} }
@ -254,11 +242,7 @@ public class MySQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_meta` FROM `bluemap_map_meta`
WHERE `map` IN ( WHERE `map` = ?
SELECT `id`
FROM `bluemap_map`
WHERE `map_id` = ?
)
AND `key` = ? AND `key` = ?
"""; """;
} }
@ -282,11 +266,7 @@ public class MySQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_tile` FROM `bluemap_map_tile`
WHERE `map` IN ( WHERE `map` = ?
SELECT m.`id`
FROM `bluemap_map` m
WHERE m.`map_id` = ?
)
"""; """;
} }
@ -296,11 +276,7 @@ public class MySQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_meta` FROM `bluemap_map_meta`
WHERE `map` IN ( WHERE `map` = ?
SELECT m.`id`
FROM `bluemap_map` m
WHERE m.`map_id` = ?
)
"""; """;
} }
@ -310,7 +286,7 @@ public class MySQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map` FROM `bluemap_map`
WHERE `map_id` = ? WHERE `map` = ?
"""; """;
} }

View File

@ -141,19 +141,11 @@ public class PostgreSQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM bluemap_map_tile FROM bluemap_map_tile
WHERE map IN ( WHERE map = ?
SELECT m.id
FROM bluemap_map m
WHERE m.map_id = ?
)
AND lod = ? AND lod = ?
AND x = ? AND x = ?
AND z = ? AND z = ?
AND compression IN ( AND compression = ?
SELECT c.id
FROM bluemap_map_tile_compression c
WHERE c.compression = ?
)
"""; """;
} }
@ -196,9 +188,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet {
WHERE CTID IN ( WHERE CTID IN (
SELECT CTID SELECT CTID
FROM bluemap_map_tile t FROM bluemap_map_tile t
INNER JOIN bluemap_map m WHERE t.map = ?
ON t.map = m.id
WHERE m.map_id = ?
LIMIT ? LIMIT ?
) )
"""; """;
@ -253,11 +243,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM bluemap_map_meta FROM bluemap_map_meta
WHERE map IN ( WHERE map = ?
SELECT id
FROM bluemap_map
WHERE map_id = ?
)
AND key = ? AND key = ?
"""; """;
} }
@ -281,11 +267,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM bluemap_map_tile FROM bluemap_map_tile
WHERE map IN ( WHERE map = ?
SELECT m.id
FROM bluemap_map m
WHERE m.map_id = ?
)
"""; """;
} }
@ -295,11 +277,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM bluemap_map_meta FROM bluemap_map_meta
WHERE map IN ( WHERE map = ?
SELECT m.id
FROM bluemap_map m
WHERE m.map_id = ?
)
"""; """;
} }
@ -309,7 +287,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM bluemap_map FROM bluemap_map
WHERE map_id = ? WHERE map = ?
"""; """;
} }

View File

@ -143,19 +143,11 @@ public class SqliteCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_tile` FROM `bluemap_map_tile`
WHERE `map` IN ( WHERE `map` = ?
SELECT m.`id`
FROM `bluemap_map` m
WHERE m.`map_id` = ?
)
AND `lod` = ? AND `lod` = ?
AND `x` = ? AND `x` = ?
AND `z` = ? AND `z` = ?
AND `compression` IN ( AND `compression` = ?
SELECT c.`id`
FROM `bluemap_map_tile_compression` c
WHERE c.`compression` = ?
)
"""; """;
} }
@ -198,9 +190,7 @@ public class SqliteCommandSet extends AbstractCommandSet {
WHERE ROWID IN ( WHERE ROWID IN (
SELECT t.ROWID SELECT t.ROWID
FROM bluemap_map_tile t FROM bluemap_map_tile t
INNER JOIN bluemap_map m WHERE t.map = ?
ON t.map = m.id
WHERE m.map_id = ?
LIMIT ? LIMIT ?
) )
"""; """;
@ -252,11 +242,7 @@ public class SqliteCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_meta` FROM `bluemap_map_meta`
WHERE `map` IN ( WHERE `map` = ?
SELECT `id`
FROM `bluemap_map`
WHERE `map_id` = ?
)
AND `key` = ? AND `key` = ?
"""; """;
} }
@ -280,11 +266,7 @@ public class SqliteCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_tile` FROM `bluemap_map_tile`
WHERE `map` IN ( WHERE `map` = ?
SELECT m.`id`
FROM `bluemap_map` m
WHERE m.`map_id` = ?
)
"""; """;
} }
@ -294,11 +276,7 @@ public class SqliteCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map_meta` FROM `bluemap_map_meta`
WHERE `map` IN ( WHERE `map` = ?
SELECT m.`id`
FROM `bluemap_map` m
WHERE m.`map_id` = ?
)
"""; """;
} }
@ -308,7 +286,7 @@ public class SqliteCommandSet extends AbstractCommandSet {
return """ return """
DELETE DELETE
FROM `bluemap_map` FROM `bluemap_map`
WHERE `map_id` = ? WHERE `map` = ?
"""; """;
} }