Tricky doing benchmarks since once the DataFrame is sorted, all subsequent sorts will be much much faster. Using @time
julia> @time sort!(simstates, [:simulation, :date])
5.096369 seconds (1.03 M allocations: 501.298 MiB, 3.68% gc time)
Definitely less memory use.