Is there anything wrong with splitting a complicated view into many small ones?
Is there a down-side to splitting them into multiple smaller views and joining them by customer_id?


Yes, definitely. Each view has to scan the whole underlying table on its own, and then you add 20 joins after that. The index does not apply to the derived tables you are joining. The single SELECT can make do with a single scan over the table (or index), it should be substantially cheaper.

Proof: db&lt;>fiddle here