What's faster, hashing a string and comparing the hash, or simply comparing the string? This Rust benchmark measures just that.
Here are the results in a benchmark done in my machine, with an AMD Ryzen 5 2600 CPU.
long article/xxh3 time: [306.54 µs 307.62 µs 308.78 µs]
long article/meowhash time: [201.29 µs 202.30 µs 203.34 µs]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
long article/ahash time: [211.37 µs 212.29 µs 213.47 µs]
Found 12 outliers among 100 measurements (12.00%)
7 (7.00%) high mild
5 (5.00%) high severe
long article/fasthash time: [716.67 µs 717.63 µs 718.64 µs]
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) high mild
3 (3.00%) high severe
Benchmarking long article/default_hasher: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.0s, enable flat sampling, or reduce sample count to 50.
long article/default_hasher
time: [1.3890 ms 1.3896 ms 1.3903 ms]
Found 7 outliers among 100 measurements (7.00%)
4 (4.00%) high mild
3 (3.00%) high severe
long article/rustc_hash time: [357.02 µs 360.66 µs 364.69 µs]
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
long article/fnv time: [6.9346 ms 6.9387 ms 6.9440 ms]
Found 15 outliers among 100 measurements (15.00%)
1 (1.00%) high mild
14 (14.00%) high severe
long article/xxhash_rust_xxh3
time: [320.39 µs 322.56 µs 324.50 µs]
long article/highway time: [589.14 µs 589.80 µs 590.49 µs]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
long article/cityhasher time: [409.54 µs 411.62 µs 414.95 µs]
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) low mild
2 (2.00%) high mild
4 (4.00%) high severe
long article/gxhash time: [170.80 µs 173.48 µs 175.93 µs]
long article/wyhash time: [406.59 µs 408.02 µs 409.37 µs]
Found 11 outliers among 100 measurements (11.00%)
8 (8.00%) low severe
3 (3.00%) low mild
long article/blake3 time: [3.0515 ms 3.0768 ms 3.0999 ms]
Found 17 outliers among 100 measurements (17.00%)
15 (15.00%) low severe
2 (2.00%) high mild
long article/hud_slice_by_8
time: [2.6158 ms 2.6217 ms 2.6284 ms]
Found 16 outliers among 100 measurements (16.00%)
9 (9.00%) high mild
7 (7.00%) high severe
long article/rapidhash time: [286.57 µs 289.37 µs 292.30 µs]
Found 11 outliers among 100 measurements (11.00%)
5 (5.00%) low mild
6 (6.00%) high mild
short article/xxh3 time: [4.5455 µs 4.5560 µs 4.5684 µs]
Found 7 outliers among 100 measurements (7.00%)
4 (4.00%) high mild
3 (3.00%) high severe
short article/meowhash time: [3.5200 µs 3.5241 µs 3.5283 µs]
Found 19 outliers among 100 measurements (19.00%)
1 (1.00%) low severe
9 (9.00%) low mild
6 (6.00%) high mild
3 (3.00%) high severe
short article/ahash time: [3.1434 µs 3.1464 µs 3.1494 µs]
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
2 (2.00%) high mild
1 (1.00%) high severe
short article/fasthash time: [13.350 µs 13.358 µs 13.369 µs]
Found 16 outliers among 100 measurements (16.00%)
1 (1.00%) low severe
6 (6.00%) high mild
9 (9.00%) high severe
short article/default_hasher
time: [27.089 µs 27.144 µs 27.220 µs]
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) low severe
4 (4.00%) high mild
7 (7.00%) high severe
short article/rustc_hash
time: [6.4883 µs 6.4931 µs 6.4992 µs]
Found 21 outliers among 100 measurements (21.00%)
2 (2.00%) low severe
8 (8.00%) low mild
4 (4.00%) high mild
7 (7.00%) high severe
short article/fnv time: [135.94 µs 136.04 µs 136.18 µs]
Found 11 outliers among 100 measurements (11.00%)
1 (1.00%) low severe
5 (5.00%) high mild
5 (5.00%) high severe
short article/xxhash_rust_xxh3
time: [4.7071 µs 4.7137 µs 4.7205 µs]
Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) low mild
2 (2.00%) high mild
2 (2.00%) high severe
short article/highway time: [11.445 µs 11.467 µs 11.489 µs]
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
3 (3.00%) high mild
short article/cityhasher
time: [7.6349 µs 7.6459 µs 7.6594 µs]
Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) high mild
5 (5.00%) high severe
short article/gxhash time: [1.8882 µs 1.8931 µs 1.8982 µs]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high severe
short article/wyhash time: [6.5771 µs 6.5922 µs 6.6068 µs]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild
short article/blake3 time: [53.345 µs 53.392 µs 53.450 µs]
Found 16 outliers among 100 measurements (16.00%)
3 (3.00%) high mild
13 (13.00%) high severe
short article/hud_slice_by_8
time: [50.933 µs 50.986 µs 51.051 µs]
Found 14 outliers among 100 measurements (14.00%)
1 (1.00%) low severe
2 (2.00%) low mild
2 (2.00%) high mild
9 (9.00%) high severe
short article/rapidhash time: [4.5694 µs 4.5757 µs 4.5829 µs]
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high mild
long article/xxh3 #2 time: [266.32 µs 266.44 µs 266.57 µs]
Found 11 outliers among 100 measurements (11.00%)
6 (6.00%) high mild
5 (5.00%) high severe
long article/meowhash #2
time: [160.78 µs 161.08 µs 161.51 µs]
Found 15 outliers among 100 measurements (15.00%)
3 (3.00%) low mild
1 (1.00%) high mild
11 (11.00%) high severe
long article/ahash #2 time: [161.36 µs 161.70 µs 162.01 µs]
long article/fasthash #2
time: [651.01 µs 653.54 µs 657.49 µs]
Found 12 outliers among 100 measurements (12.00%)
2 (2.00%) high mild
10 (10.00%) high severe
Benchmarking long article/default_hasher #2: Warming up for 3.0000 s
Warning: Unable to complete 100 samples in 5.0s. You may wish to increase target time to 7.0s, enable flat sampling, or reduce sample count to 50.
long article/default_hasher #2
time: [1.3808 ms 1.3824 ms 1.3845 ms]
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
long article/rustc_hash #2
time: [328.16 µs 328.55 µs 329.00 µs]
Found 15 outliers among 100 measurements (15.00%)
3 (3.00%) high mild
12 (12.00%) high severe
long article/fnv #2 time: [6.9401 ms 6.9469 ms 6.9551 ms]
Found 20 outliers among 100 measurements (20.00%)
7 (7.00%) high mild
13 (13.00%) high severe
long article/xxhash_rust_xxh3 #2
time: [275.03 µs 275.28 µs 275.53 µs]
Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) low severe
11 (11.00%) low mild
6 (6.00%) high mild
3 (3.00%) high severe
long article/highway #2 time: [584.52 µs 587.15 µs 589.40 µs]
long article/cityhasher #2
time: [385.73 µs 386.17 µs 386.65 µs]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild
long article/gxhash #2 time: [109.86 µs 109.91 µs 109.97 µs]
Found 16 outliers among 100 measurements (16.00%)
1 (1.00%) low severe
1 (1.00%) low mild
4 (4.00%) high mild
10 (10.00%) high severe
long article/wyhash #2 time: [337.53 µs 339.36 µs 341.39 µs]
long article/blake3 #2 time: [2.8119 ms 2.8444 ms 2.8766 ms]
long article/hud_slice_by_8 #2
time: [2.5882 ms 2.5908 ms 2.5935 ms]
long article/rapidhash #2
time: [238.33 µs 239.99 µs 241.97 µs]
== comparison/short time: [2.0746 ns 2.0758 ns 2.0771 ns]
Found 11 outliers among 100 measurements (11.00%)
4 (4.00%) low mild
3 (3.00%) high mild
4 (4.00%) high severe
== comparison/long time: [2.0664 ns 2.0676 ns 2.0688 ns]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
== comparison/true time: [69.121 µs 69.209 µs 69.277 µs]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low severe
1 (1.00%) high mild
Running benches/small.rs (target/release/deps/small-d93abed6630a27af)
3 bytes (1000 times)/xxh3
time: [3.3601 µs 3.3686 µs 3.3791 µs]
Found 10 outliers among 100 measurements (10.00%)
6 (6.00%) high mild
4 (4.00%) high severe
3 bytes (1000 times)/meowhash
time: [41.836 µs 41.869 µs 41.905 µs]
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) high mild
1 (1.00%) high severe
3 bytes (1000 times)/ahash
time: [4.7886 µs 4.8034 µs 4.8164 µs]
3 bytes (1000 times)/fasthash
time: [5.5338 µs 5.5395 µs 5.5455 µs]
Found 10 outliers among 100 measurements (10.00%)
3 (3.00%) high mild
7 (7.00%) high severe
3 bytes (1000 times)/default_hasher
time: [8.9491 µs 8.9587 µs 8.9689 µs]
3 bytes (1000 times)/rustc_hash
time: [2.6371 µs 2.6467 µs 2.6584 µs]
Found 6 outliers among 100 measurements (6.00%)
4 (4.00%) high mild
2 (2.00%) high severe
3 bytes (1000 times)/fnv
time: [2.8621 µs 2.8648 µs 2.8675 µs]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
3 bytes (1000 times)/xxhash_rust_xxh3
time: [17.504 µs 17.608 µs 17.724 µs]
Found 9 outliers among 100 measurements (9.00%)
5 (5.00%) high mild
4 (4.00%) high severe
3 bytes (1000 times)/highway
time: [37.590 µs 37.622 µs 37.654 µs]
Found 6 outliers among 100 measurements (6.00%)
3 (3.00%) high mild
3 (3.00%) high severe
3 bytes (1000 times)/cityhasher
time: [7.3135 µs 7.3485 µs 7.3906 µs]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild
3 bytes (1000 times)/gxhash
time: [13.893 µs 13.904 µs 13.919 µs]
Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) low severe
1 (1.00%) low mild
2 (2.00%) high mild
17 (17.00%) high severe
3 bytes (1000 times)/wyhash
time: [5.3448 µs 5.3771 µs 5.4129 µs]
Found 10 outliers among 100 measurements (10.00%)
6 (6.00%) high mild
4 (4.00%) high severe
3 bytes (1000 times)/blake3
time: [84.932 µs 85.067 µs 85.275 µs]
Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) low severe
8 (8.00%) low mild
5 (5.00%) high mild
7 (7.00%) high severe
3 bytes (1000 times)/hud_slice_by_8
time: [6.7793 µs 6.8111 µs 6.8522 µs]
Found 6 outliers among 100 measurements (6.00%)
3 (3.00%) low mild
3 (3.00%) high severe
3 bytes (1000 times)/rapidhash
time: [3.0560 µs 3.0647 µs 3.0731 µs]
Found 8 outliers among 100 measurements (8.00%)
6 (6.00%) high mild
2 (2.00%) high severe
10 bytes (1000 times)/xxh3
time: [12.492 µs 12.504 µs 12.520 µs]
Found 11 outliers among 100 measurements (11.00%)
1 (1.00%) low severe
2 (2.00%) low mild
2 (2.00%) high mild
6 (6.00%) high severe
10 bytes (1000 times)/meowhash
time: [42.879 µs 42.983 µs 43.101 µs]
Found 7 outliers among 100 measurements (7.00%)
3 (3.00%) low mild
3 (3.00%) high mild
1 (1.00%) high severe
10 bytes (1000 times)/ahash
time: [13.603 µs 13.623 µs 13.644 µs]
10 bytes (1000 times)/fasthash
time: [16.216 µs 16.228 µs 16.243 µs]
Found 18 outliers among 100 measurements (18.00%)
2 (2.00%) low mild
2 (2.00%) high mild
14 (14.00%) high severe
10 bytes (1000 times)/default_hasher
time: [16.328 µs 16.346 µs 16.368 µs]
Found 13 outliers among 100 measurements (13.00%)
1 (1.00%) high mild
12 (12.00%) high severe
10 bytes (1000 times)/rustc_hash
time: [11.598 µs 11.604 µs 11.612 µs]
Found 10 outliers among 100 measurements (10.00%)
2 (2.00%) low mild
1 (1.00%) high mild
7 (7.00%) high severe
10 bytes (1000 times)/fnv
time: [6.0300 µs 6.0722 µs 6.1166 µs]
Found 20 outliers among 100 measurements (20.00%)
2 (2.00%) low mild
7 (7.00%) high mild
11 (11.00%) high severe
10 bytes (1000 times)/xxhash_rust_xxh3
time: [24.770 µs 24.809 µs 24.852 µs]
Found 8 outliers among 100 measurements (8.00%)
5 (5.00%) high mild
3 (3.00%) high severe
10 bytes (1000 times)/highway
time: [37.955 µs 38.007 µs 38.058 µs]
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) low mild
5 (5.00%) high mild
1 (1.00%) high severe
10 bytes (1000 times)/cityhasher
time: [15.486 µs 15.503 µs 15.524 µs]
Found 19 outliers among 100 measurements (19.00%)
3 (3.00%) low mild
2 (2.00%) high mild
14 (14.00%) high severe
10 bytes (1000 times)/gxhash
time: [13.667 µs 13.687 µs 13.713 µs]
Found 20 outliers among 100 measurements (20.00%)
2 (2.00%) low severe
5 (5.00%) low mild
2 (2.00%) high mild
11 (11.00%) high severe
10 bytes (1000 times)/wyhash
time: [12.120 µs 12.133 µs 12.150 µs]
Found 13 outliers among 100 measurements (13.00%)
3 (3.00%) high mild
10 (10.00%) high severe
10 bytes (1000 times)/blake3
time: [83.617 µs 83.705 µs 83.808 µs]
Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) low mild
3 (3.00%) high mild
2 (2.00%) high severe
10 bytes (1000 times)/hud_slice_by_8
time: [14.812 µs 14.832 µs 14.854 µs]
Found 7 outliers among 100 measurements (7.00%)
5 (5.00%) high mild
2 (2.00%) high severe
10 bytes (1000 times)/rapidhash
time: [12.496 µs 12.508 µs 12.525 µs]
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) low severe
2 (2.00%) high mild
9 (9.00%) high severe
100 bytes (1000 times)/xxh3
time: [16.300 µs 16.321 µs 16.347 µs]
Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) high mild
4 (4.00%) high severe
100 bytes (1000 times)/meowhash
time: [51.016 µs 51.295 µs 51.579 µs]
Found 10 outliers among 100 measurements (10.00%)
6 (6.00%) high mild
4 (4.00%) high severe
100 bytes (1000 times)/ahash
time: [22.732 µs 22.741 µs 22.751 µs]
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) low severe
3 (3.00%) low mild
2 (2.00%) high mild
1 (1.00%) high severe
100 bytes (1000 times)/fasthash
time: [28.327 µs 28.355 µs 28.393 µs]
Found 16 outliers among 100 measurements (16.00%)
1 (1.00%) high mild
15 (15.00%) high severe
100 bytes (1000 times)/default_hasher
time: [29.921 µs 29.957 µs 30.004 µs]
Found 21 outliers among 100 measurements (21.00%)
2 (2.00%) low mild
9 (9.00%) high mild
10 (10.00%) high severe
100 bytes (1000 times)/rustc_hash
time: [17.366 µs 17.380 µs 17.398 µs]
Found 9 outliers among 100 measurements (9.00%)
2 (2.00%) high mild
7 (7.00%) high severe
100 bytes (1000 times)/fnv
time: [99.967 µs 100.09 µs 100.24 µs]
Found 9 outliers among 100 measurements (9.00%)
5 (5.00%) high mild
4 (4.00%) high severe
100 bytes (1000 times)/xxhash_rust_xxh3
time: [34.523 µs 34.609 µs 34.706 µs]
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
2 (2.00%) high mild
1 (1.00%) high severe
100 bytes (1000 times)/highway
time: [44.650 µs 44.717 µs 44.790 µs]
Found 7 outliers among 100 measurements (7.00%)
6 (6.00%) high mild
1 (1.00%) high severe
100 bytes (1000 times)/cityhasher
time: [29.574 µs 29.600 µs 29.629 µs]
Found 15 outliers among 100 measurements (15.00%)
2 (2.00%) low mild
8 (8.00%) high mild
5 (5.00%) high severe
100 bytes (1000 times)/gxhash
time: [22.603 µs 22.613 µs 22.625 µs]
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) high mild
3 (3.00%) high severe
100 bytes (1000 times)/wyhash
time: [18.231 µs 18.248 µs 18.265 µs]
100 bytes (1000 times)/blake3
time: [153.26 µs 153.32 µs 153.38 µs]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mild
100 bytes (1000 times)/hud_slice_by_8
time: [46.995 µs 47.051 µs 47.110 µs]
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) high mild
1 (1.00%) high severe
100 bytes (1000 times)/rapidhash
time: [17.783 µs 17.802 µs 17.829 µs]
Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) low severe
2 (2.00%) low mild
1 (1.00%) high mild
17 (17.00%) high severe
As you can see, the default stringA == stringB
is about 10^6 times faster than the fastest hashing algorithm. So yeah, hashing is slower than comparing (at least in Rust). This was tested on the article*.txt
files you see on the file tree.
To see the full Criterion report check here
(Git and Cargo must be installed)
Just clone this repo with git clone https://github.com/rosetta-rs/hashing-rosetta-rs
or download the ZIP with the green button, and run RUSTFLAGS="-C target-cpu=native"cargo bench
.