Loading migrate/sql/20230208224400-storage-optimize-idx.sql +9 −2 Original line number Diff line number Diff line CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS storage_collection_user_id_key_idx ON storage (collection, user_id, key); --TODO: wait for index to complete ALTER TABLE storage drop constraint storage_pkey, add primary key using index "storage_collection_key_user_id_key"; drop constraint storage_pkey, add primary key using index "storage_collection_user_id_key_idx"; DROP INDEX storage_pkey RESTRICT; DROP INDEX storage_collection_key_user_id_key RESTRICT; DROP INDEX collection_read_user_id_key_idx RESTRICT; DROP INDEX collection_user_id_read_key_idx RESTRICT; CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS collection_user_id_key_idx ON storage (collection, user_id, key); server/core_storage.go +4 −5 Original line number Diff line number Diff line Loading @@ -151,9 +151,8 @@ func StorageListObjectsAll(ctx context.Context, logger *zap.Logger, db *sql.DB, cursorQuery := "" params := []interface{}{collection, limit + 1} if storageCursor != nil { //TODO: check if we can reorder collection,user_id, key cursorQuery = ` AND (collection, key, user_id) > ($1, $3, $4) ` params = append(params, storageCursor.Key, storageCursor.UserID) cursorQuery = ` AND (collection, user_id, key) > ($1, $3, $4) ` params = append(params, storageCursor.UserID, storageCursor.Key) } var query string Loading @@ -162,14 +161,14 @@ func StorageListObjectsAll(ctx context.Context, logger *zap.Logger, db *sql.DB, SELECT collection, key, user_id, value, version, read, write, create_time, update_time FROM storage WHERE collection = $1` + cursorQuery + ` ORDER BY key ASC, user_id ASC ORDER BY user_id ASC, key ASC LIMIT $2` } else { query = ` SELECT collection, key, user_id, value, version, read, write, create_time, update_time FROM storage WHERE collection = $1 AND read >= 2` + cursorQuery + ` ORDER BY key ASC, user_id ASC ORDER BY user_id ASC, key ASC LIMIT $2` } Loading Loading
migrate/sql/20230208224400-storage-optimize-idx.sql +9 −2 Original line number Diff line number Diff line CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS storage_collection_user_id_key_idx ON storage (collection, user_id, key); --TODO: wait for index to complete ALTER TABLE storage drop constraint storage_pkey, add primary key using index "storage_collection_key_user_id_key"; drop constraint storage_pkey, add primary key using index "storage_collection_user_id_key_idx"; DROP INDEX storage_pkey RESTRICT; DROP INDEX storage_collection_key_user_id_key RESTRICT; DROP INDEX collection_read_user_id_key_idx RESTRICT; DROP INDEX collection_user_id_read_key_idx RESTRICT; CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS collection_user_id_key_idx ON storage (collection, user_id, key);
server/core_storage.go +4 −5 Original line number Diff line number Diff line Loading @@ -151,9 +151,8 @@ func StorageListObjectsAll(ctx context.Context, logger *zap.Logger, db *sql.DB, cursorQuery := "" params := []interface{}{collection, limit + 1} if storageCursor != nil { //TODO: check if we can reorder collection,user_id, key cursorQuery = ` AND (collection, key, user_id) > ($1, $3, $4) ` params = append(params, storageCursor.Key, storageCursor.UserID) cursorQuery = ` AND (collection, user_id, key) > ($1, $3, $4) ` params = append(params, storageCursor.UserID, storageCursor.Key) } var query string Loading @@ -162,14 +161,14 @@ func StorageListObjectsAll(ctx context.Context, logger *zap.Logger, db *sql.DB, SELECT collection, key, user_id, value, version, read, write, create_time, update_time FROM storage WHERE collection = $1` + cursorQuery + ` ORDER BY key ASC, user_id ASC ORDER BY user_id ASC, key ASC LIMIT $2` } else { query = ` SELECT collection, key, user_id, value, version, read, write, create_time, update_time FROM storage WHERE collection = $1 AND read >= 2` + cursorQuery + ` ORDER BY key ASC, user_id ASC ORDER BY user_id ASC, key ASC LIMIT $2` } Loading