The question of the 386SX vs 386DX is a confusing one. It always has been, even going back to when the chips were new. It doesn’t help that Intel wasn’t consistent. With the 386, SX vs DX has nothing to do with math coprocessors. It has everything to do with width of the data bus.
How 32-bit are you?
The 386DX came first. At first it was just called the 386. Later, the cost reduced SX came out, so the full 32-bit version got a new name.
The SX was a 32-bit chip internally, but only had a 16-bit path to the system memory. The DX was a full 32-bit chip. It could address memory faster, and more of it. You could only put 16 MB of memory on a 386 SX. The theoretical limit of a 386DX was 4 GB. The practical limit was much lower, and few people outfitted their 386’s with more than 16 MB, but if there was room on the motherboard and the chipset supported it, the DX could take more.
Both chips could use a math coprocessor, but in both cases it was a separate chip that plugged into its own socket. There was some latency in handing work off to an external coprocessor, which was one reason why the 486 integrated both into the same chip.
Performance of the 386SX vs 386DX
The 386 SX might as well be a glorified 286. From a performance standpoint it’s a 286 with 386 compatibility and slightly better memory management. It provides no speed improvement. Usually it’s a touch slower than a 286 at the same clock speed.
The DX was an improvement over the 286. At the same clock speed, all other things being equal, it is about 33% faster than either of them. That’s mostly due to faster memory access. Not every operation takes place in memory, so that’s why the 386DX isn’t twice as fast as a 386SX.
From a practical standpoint, a 25 MHz 386DX can keep pace with a 33 MHz 386SX. Depending on the board you have, the difference can be even greater. Especially if the DX-based system has L2 cache memory available, which improves performance about 10%.
That’s why a 386DX was the recommended minimum system if you wanted to run Windows 3.1.