From a6402850c90e0547d1bdd686ad085a69c6c47137 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Thu, 18 Apr 2024 15:46:45 +0200 Subject: [PATCH] Fix delete statements doing a full table scan --- .../sql/commandset/AbstractCommandSet.java | 17 ++++++--- .../sql/commandset/MySQLCommandSet.java | 38 ++++--------------- .../sql/commandset/PostgreSQLCommandSet.java | 36 ++++-------------- .../sql/commandset/SqliteCommandSet.java | 36 ++++-------------- 4 files changed, 32 insertions(+), 95 deletions(-) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/AbstractCommandSet.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/AbstractCommandSet.java index 9b3548c8..43b4de11 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/AbstractCommandSet.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/AbstractCommandSet.java @@ -113,10 +113,12 @@ public abstract class AbstractCommandSet implements CommandSet { @Override 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 executeUpdate(connection, deleteMapTileStatement(), - mapId, lod, x, z, compression.getKey().getFormatted() + mapKey, lod, x, z, compressionKey ); }); } @@ -156,10 +158,11 @@ public abstract class AbstractCommandSet implements CommandSet { @Override public int purgeMapTiles(String mapId, int limit) throws IOException { + int mapKey = mapKey(mapId); return db.run(connection -> { return executeUpdate(connection, purgeMapTilesStatement(), - mapId, limit + mapKey, limit ); }); } @@ -230,10 +233,11 @@ public abstract class AbstractCommandSet implements CommandSet { @Override public int deleteMapMeta(String mapId, String itemName) throws IOException { + int mapKey = mapKey(mapId); return db.run(connection -> { return executeUpdate(connection, deleteMapMetaStatement(), - mapId, itemName + mapKey, itemName ); }); } @@ -265,21 +269,22 @@ public abstract class AbstractCommandSet implements CommandSet { @Override public void purgeMap(String mapId) throws IOException { synchronized (mapKeys) { + int mapKey = mapKey(mapId); db.run(connection -> { executeUpdate(connection, purgeMapTileTableStatement(), - mapId + mapKey ); executeUpdate(connection, purgeMapMetaTableStatement(), - mapId + mapKey ); executeUpdate(connection, deleteMapStatement(), - mapId + mapKey ); }); diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/MySQLCommandSet.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/MySQLCommandSet.java index 77f6c4ae..b04db4f7 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/MySQLCommandSet.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/MySQLCommandSet.java @@ -147,19 +147,11 @@ public class MySQLCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_tile` - WHERE `map` IN ( - SELECT m.`id` - FROM `bluemap_map` m - WHERE m.`map_id` = ? - ) + WHERE `map` = ? AND `lod` = ? AND `x` = ? AND `z` = ? - AND `compression` IN ( - SELECT c.`id` - FROM `bluemap_map_tile_compression` c - WHERE c.`compression` = ? - ) + AND `compression` = ? """; } @@ -199,11 +191,7 @@ public class MySQLCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_tile` - WHERE `map` IN ( - SELECT `id` - FROM `bluemap_map` - WHERE `map_id` = ? - ) + WHERE `map` = ? LIMIT ? """; } @@ -254,11 +242,7 @@ public class MySQLCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_meta` - WHERE `map` IN ( - SELECT `id` - FROM `bluemap_map` - WHERE `map_id` = ? - ) + WHERE `map` = ? AND `key` = ? """; } @@ -282,11 +266,7 @@ public class MySQLCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_tile` - WHERE `map` IN ( - SELECT m.`id` - FROM `bluemap_map` m - WHERE m.`map_id` = ? - ) + WHERE `map` = ? """; } @@ -296,11 +276,7 @@ public class MySQLCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_meta` - WHERE `map` IN ( - SELECT m.`id` - FROM `bluemap_map` m - WHERE m.`map_id` = ? - ) + WHERE `map` = ? """; } @@ -310,7 +286,7 @@ public class MySQLCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map` - WHERE `map_id` = ? + WHERE `map` = ? """; } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/PostgreSQLCommandSet.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/PostgreSQLCommandSet.java index 0ec8478b..69a57592 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/PostgreSQLCommandSet.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/PostgreSQLCommandSet.java @@ -141,19 +141,11 @@ public class PostgreSQLCommandSet extends AbstractCommandSet { return """ DELETE FROM bluemap_map_tile - WHERE map IN ( - SELECT m.id - FROM bluemap_map m - WHERE m.map_id = ? - ) + WHERE map = ? AND lod = ? AND x = ? AND z = ? - AND compression IN ( - SELECT c.id - FROM bluemap_map_tile_compression c - WHERE c.compression = ? - ) + AND compression = ? """; } @@ -196,9 +188,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet { WHERE CTID IN ( SELECT CTID FROM bluemap_map_tile t - INNER JOIN bluemap_map m - ON t.map = m.id - WHERE m.map_id = ? + WHERE t.map = ? LIMIT ? ) """; @@ -253,11 +243,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet { return """ DELETE FROM bluemap_map_meta - WHERE map IN ( - SELECT id - FROM bluemap_map - WHERE map_id = ? - ) + WHERE map = ? AND key = ? """; } @@ -281,11 +267,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet { return """ DELETE FROM bluemap_map_tile - WHERE map IN ( - SELECT m.id - FROM bluemap_map m - WHERE m.map_id = ? - ) + WHERE map = ? """; } @@ -295,11 +277,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet { return """ DELETE FROM bluemap_map_meta - WHERE map IN ( - SELECT m.id - FROM bluemap_map m - WHERE m.map_id = ? - ) + WHERE map = ? """; } @@ -309,7 +287,7 @@ public class PostgreSQLCommandSet extends AbstractCommandSet { return """ DELETE FROM bluemap_map - WHERE map_id = ? + WHERE map = ? """; } diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/SqliteCommandSet.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/SqliteCommandSet.java index 4d4ba858..2d35782a 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/SqliteCommandSet.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/storage/sql/commandset/SqliteCommandSet.java @@ -143,19 +143,11 @@ public class SqliteCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_tile` - WHERE `map` IN ( - SELECT m.`id` - FROM `bluemap_map` m - WHERE m.`map_id` = ? - ) + WHERE `map` = ? AND `lod` = ? AND `x` = ? AND `z` = ? - AND `compression` IN ( - SELECT c.`id` - FROM `bluemap_map_tile_compression` c - WHERE c.`compression` = ? - ) + AND `compression` = ? """; } @@ -198,9 +190,7 @@ public class SqliteCommandSet extends AbstractCommandSet { WHERE ROWID IN ( SELECT t.ROWID FROM bluemap_map_tile t - INNER JOIN bluemap_map m - ON t.map = m.id - WHERE m.map_id = ? + WHERE t.map = ? LIMIT ? ) """; @@ -252,11 +242,7 @@ public class SqliteCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_meta` - WHERE `map` IN ( - SELECT `id` - FROM `bluemap_map` - WHERE `map_id` = ? - ) + WHERE `map` = ? AND `key` = ? """; } @@ -280,11 +266,7 @@ public class SqliteCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_tile` - WHERE `map` IN ( - SELECT m.`id` - FROM `bluemap_map` m - WHERE m.`map_id` = ? - ) + WHERE `map` = ? """; } @@ -294,11 +276,7 @@ public class SqliteCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map_meta` - WHERE `map` IN ( - SELECT m.`id` - FROM `bluemap_map` m - WHERE m.`map_id` = ? - ) + WHERE `map` = ? """; } @@ -308,7 +286,7 @@ public class SqliteCommandSet extends AbstractCommandSet { return """ DELETE FROM `bluemap_map` - WHERE `map_id` = ? + WHERE `map` = ? """; }