diff --git a/ethdb/kv_lmdb.go b/ethdb/kv_lmdb.go
index 80259ec16422a07f144d098d52a2008f6df840f0..f9834040cbd20ec29396a2c85fa84ff7453a9bcd 100644
--- a/ethdb/kv_lmdb.go
+++ b/ethdb/kv_lmdb.go
@@ -78,6 +78,7 @@ func (opts lmdbOpts) Open() (KV, error) {
 	if opts.inMem {
 		flags |= lmdb.NoSync | lmdb.NoMetaSync | lmdb.WriteMap
 	}
+	flags |= lmdb.NoReadahead
 	if err = os.MkdirAll(opts.path, 0744); err != nil {
 		return nil, fmt.Errorf("could not create dir: %s, %w", opts.path, err)
 	}
@@ -224,9 +225,10 @@ func (db *LmdbKV) Get(ctx context.Context, bucket, key []byte) ([]byte, error) {
 	var val []byte
 	err = db.View(ctx, func(tx Tx) error {
 		v, err2 := tx.(*lmdbTx).tx.Get(dbi, key)
-		if lmdb.IsNotFound(err2) {
-			return nil
-		} else if err2 != nil {
+		if err2 != nil {
+			if lmdb.IsNotFound(err2) {
+				return nil
+			}
 			return err2
 		}
 		if v != nil {
@@ -248,9 +250,10 @@ func (db *LmdbKV) Has(ctx context.Context, bucket, key []byte) (bool, error) {
 	var has bool
 	err = db.View(ctx, func(tx Tx) error {
 		v, err2 := tx.(*lmdbTx).tx.Get(dbi, key)
-		if lmdb.IsNotFound(err2) {
-			return nil
-		} else if err2 != nil {
+		if err2 != nil {
+			if lmdb.IsNotFound(err2) {
+				return nil
+			}
 			return err2
 		}
 		has = v != nil
@@ -415,8 +418,11 @@ func (b lmdbBucket) Get(key []byte) (val []byte, err error) {
 	}
 
 	val, err = b.tx.tx.Get(b.dbi, key)
-	if lmdb.IsNotFound(err) {
-		return nil, nil
+	if err != nil {
+		if lmdb.IsNotFound(err) {
+			return nil, nil
+		}
+		return nil, err
 	}
 	return val, err
 }
@@ -443,8 +449,11 @@ func (b *lmdbBucket) Delete(key []byte) error {
 	}
 
 	err := b.tx.tx.Del(b.dbi, key, nil)
-	if lmdb.IsNotFound(err) {
-		return nil
+	if err != nil {
+		if lmdb.IsNotFound(err) {
+			return nil
+		}
+		return err
 	}
 	return err
 }
@@ -524,15 +533,14 @@ func (c *lmdbCursor) Seek(seek []byte) ([]byte, []byte, error) {
 		c.k, c.v, c.err = c.cursor.Get(nil, nil, lmdb.First)
 	} else {
 		c.k, c.v, c.err = c.cursor.Get(seek, nil, lmdb.SetRange)
-
-	}
-	if lmdb.IsNotFound(c.err) {
-		return nil, c.v, nil
 	}
 	if c.err != nil {
+		if lmdb.IsNotFound(c.err) {
+			return nil, nil, nil
+		}
 		return []byte{}, nil, fmt.Errorf("failed LmdbKV cursor.Seek(): %w, key: %x", c.err, seek)
 	}
-	if !bytes.HasPrefix(c.k, c.prefix) {
+	if c.prefix != nil && !bytes.HasPrefix(c.k, c.prefix) {
 		c.k, c.v = nil, nil
 	}
 
@@ -551,13 +559,13 @@ func (c *lmdbCursor) Next() ([]byte, []byte, error) {
 	}
 
 	c.k, c.v, c.err = c.cursor.Get(nil, nil, lmdb.Next)
-	if lmdb.IsNotFound(c.err) {
-		return nil, c.v, nil
-	}
 	if c.err != nil {
+		if lmdb.IsNotFound(c.err) {
+			return nil, nil, nil
+		}
 		return []byte{}, nil, fmt.Errorf("failed LmdbKV cursor.Next(): %w", c.err)
 	}
-	if !bytes.HasPrefix(c.k, c.prefix) {
+	if c.prefix != nil && !bytes.HasPrefix(c.k, c.prefix) {
 		c.k, c.v = nil, nil
 	}
 
@@ -645,13 +653,14 @@ func (c *lmdbNoValuesCursor) First() ([]byte, uint32, error) {
 	} else {
 		c.k, c.v, c.err = c.cursor.Get(c.prefix, nil, lmdb.SetKey)
 	}
-	if lmdb.IsNotFound(c.err) {
-		return []byte{}, uint32(len(c.v)), nil
-	}
 	if c.err != nil {
+		if lmdb.IsNotFound(c.err) {
+			return []byte{}, uint32(len(c.v)), nil
+		}
 		return []byte{}, 0, c.err
 	}
-	if !bytes.HasPrefix(c.k, c.prefix) {
+
+	if c.prefix != nil && !bytes.HasPrefix(c.k, c.prefix) {
 		c.k, c.v = nil, nil
 	}
 	return c.k, uint32(len(c.v)), c.err
@@ -669,13 +678,13 @@ func (c *lmdbNoValuesCursor) Seek(seek []byte) ([]byte, uint32, error) {
 	}
 
 	c.k, c.v, c.err = c.cursor.Get(seek, nil, lmdb.SetKey)
-	if lmdb.IsNotFound(c.err) {
-		return nil, uint32(len(c.v)), nil
-	}
 	if c.err != nil {
+		if lmdb.IsNotFound(c.err) {
+			return []byte{}, uint32(len(c.v)), nil
+		}
 		return []byte{}, 0, c.err
 	}
-	if !bytes.HasPrefix(c.k, c.prefix) {
+	if c.prefix != nil && !bytes.HasPrefix(c.k, c.prefix) {
 		c.k, c.v = nil, nil
 	}
 
@@ -694,13 +703,13 @@ func (c *lmdbNoValuesCursor) Next() ([]byte, uint32, error) {
 	}
 
 	c.k, c.v, c.err = c.cursor.Get(nil, nil, lmdb.Next)
-	if lmdb.IsNotFound(c.err) {
-		return nil, uint32(len(c.v)), nil
-	}
 	if c.err != nil {
+		if lmdb.IsNotFound(c.err) {
+			return []byte{}, uint32(len(c.v)), nil
+		}
 		return []byte{}, 0, c.err
 	}
-	if !bytes.HasPrefix(c.k, c.prefix) {
+	if c.prefix != nil && !bytes.HasPrefix(c.k, c.prefix) {
 		c.k, c.v = nil, nil
 	}