bech32 produces smaller transactions than P2SH segwit transactions.
- one extra byte per output to create P2SH outputs than to create bech32 utxos (P2SH uses
OP_HASH160 and OP_EQUAL in addition to a 20 byte hash in its script, whereas bech32 just uses a fixed 00 byte in addition to a 20 byte hash), and
- 23 extra bytes per input to spend from P2SH utxos than from bech32 utxos (P2SH has to produce the script that was hashed when spending in the sigscript, which takes 23 bytes to encode - bech32 has no non-witness sigscript at all).
Basically P2SH requires a script hash, native SegWit doesn't, and everything else is much the same. Native SegWit provides the script when the output is created, and P2SH provides it when the output is spent.
See discussion here: https://www.reddit.com/r/Bitcoin/comments/80a4zl/bitcoin_utxo_has_been_reduced_by_10_in_one_month/duu91c9/
– Chris Moore – 2018-02-26T13:57:45.193https://bitcoincore.org/en/segwit_wallet_dev/#why-and-how-to-use-native-p2wpkh-and-p2wsh says "Comparing with the P2SH versions, the transaction vsize of native versions is smaller in most cases". – Chris Moore – 2018-02-26T14:47:29.107