diff --git a/crates/polars-io/src/mmap.rs b/crates/polars-io/src/mmap.rs
index 4d20492c9ba7..95c997fc6ac7 100644
--- a/crates/polars-io/src/mmap.rs
+++ b/crates/polars-io/src/mmap.rs
@@ -82,12 +82,14 @@ impl std::ops::Deref for ReaderBytes<'_> {
     }
 }
 
-/// Require 'static to force the caller to do any transmute as it's usually much
-/// clearer to see there whether it's sound.
+/// There are some places that perform manual lifetime management after transmuting `ReaderBytes`
+/// to have a `'static` inner lifetime. The advantage to doing this is that it lets you construct a
+/// `MemSlice` from the `ReaderBytes` in a zero-copy manner regardless of the underlying enum
+/// variant.
 impl ReaderBytes<'static> {
-    pub fn to_static_slice(&self) -> MemSlice {
-        // This function isn't marked as unsafe, since you can only call it after transmuting
-        // `ReaderBytes` to have a `'static` inner lifetime.
+    ///  # Safety
+    /// `Self` outlives the returned `MemSlice` if this enum variant is an `Owned(Vec<u8>)`.
+    pub unsafe fn to_static_slice(&self) -> MemSlice {
         match self {
             ReaderBytes::Borrowed(v) => MemSlice::from_static(v),
             ReaderBytes::Owned(v) => MemSlice::from_static(unsafe {
@@ -98,14 +100,6 @@ impl ReaderBytes<'static> {
             },
         }
     }
-
-    pub fn into_mem_slice(self) -> MemSlice {
-        match self {
-            ReaderBytes::Borrowed(v) => MemSlice::from_static(v),
-            ReaderBytes::Owned(v) => MemSlice::from_vec(v),
-            ReaderBytes::Mapped(v, _) => MemSlice::from_mmap(Arc::new(v)),
-        }
-    }
 }
 
 impl<'a, T: 'a + MmapBytesReader> From<&'a mut T> for ReaderBytes<'a> {
diff --git a/crates/polars-io/src/parquet/read/read_impl.rs b/crates/polars-io/src/parquet/read/read_impl.rs
index a9c17ea2d200..88a6a8c52c9e 100644
--- a/crates/polars-io/src/parquet/read/read_impl.rs
+++ b/crates/polars-io/src/parquet/read/read_impl.rs
@@ -908,10 +908,9 @@ pub fn read_parquet<R: MmapBytesReader>(
     }
 
     let reader = ReaderBytes::from(&mut reader);
-    let store = mmap::ColumnStore::Local(
-        unsafe { std::mem::transmute::<ReaderBytes<'_>, ReaderBytes<'static>>(reader) }
-            .into_mem_slice(),
-    );
+    let store = mmap::ColumnStore::Local(unsafe {
+        std::mem::transmute::<ReaderBytes<'_>, ReaderBytes<'static>>(reader).to_static_slice()
+    });
 
     let dfs = rg_to_dfs(
         &store,
@@ -959,7 +958,9 @@ impl FetchRowGroupsFromMmapReader {
 
     fn fetch_row_groups(&mut self, _row_groups: Range<usize>) -> PolarsResult<ColumnStore> {
         // @TODO: we can something smarter here with mmap
-        Ok(mmap::ColumnStore::Local(self.0.to_static_slice()))
+        Ok(mmap::ColumnStore::Local(unsafe {
+            self.0.to_static_slice()
+        }))
     }
 }