Swapping isn't an indication that you're running out of memory. It's an indication that memory pages are being moved.
When moving memory regions for various purposes (be it defragmentation, idle page offloading, or optimization of some other sort), the easiest and most effective way to do that is to to put it into swap, and then re-allocate it into primary memory when (or typically before) it's actually needed. This process can be forced by some applications to solve problems internally, such as extreme memory fragmentation. This will happen despite your swappiness setting.
Turning swappiness to zero only makes sure that instead of being able to proactively send idle pages down to swap, everything is sent down to it at once during a critical OOM event. Swap typically isn't able to write quickly enough to solve this problem, and then the OOMkiller goes and starts shooting processes in the head. The logic it uses for this is somewhat aggressive, and it'll probably end up trying to kill init if things are busy.
So instead of increasing performance, this will make sure that your machine crashes if it runs out of memory (even if it's almost all idle pages that are doing nothing), regardless of how much swap you actually have. It will also increase memory fragmentation, reducing performance and stability in many scenarios.
If you don't want a machine to ever swap or page, don't put swap on it. This is a bad idea in most scenarios, but can be appropriate for diskless systems and SOME virtualized workloads.
If you want to limit swapping in a system to potentially decrease application latencies, set swappiness to around 10. This is for systems with an excess of memory, such as yours.
If you want to know if your machine is running out of memory, point some actual monitoring at it.