I have a "Listing" post type with 30+ meta keys which I feel like can cause a strain on the database when there's 100+ posts. Usually what I do is save each meta value 1 by 1 like so:
if(isset($_POST['_item_stock']) && !empty($_POST['_item_stock'])) update_post_meta($post_id, '_item_stock', sanitize_text_field($_POST['_item_stock'])); else delete_post_meta($post_id, '_item_stock');
I do this because if I need more control over validation, I have it. It's organized and nice looking in the code. The Drawback being that it's lengthy and it saves each meta individually in the database.
My other option is to standardize all my meta into an array then serialize it. The Drawback to this method is that I can't run any meta queries on serialized data, so filtering searches or post ordering is out the window.
The final option is to do half and half, serialize what I don't need for queries and everything else I save individually. While it may be save some overhead I don't want it to look messy in my code or have any kind of disconnect.
My question is - How do you normally handle posts that have many meta keys? Is the database overhead as bad as I imagine when I save each meta key individually? Which method do you think is the best and why?