Skip to content

Instantly share code, notes, and snippets.

@spilliton
Last active December 18, 2015 07:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spilliton/5743965 to your computer and use it in GitHub Desktop.
Save spilliton/5743965 to your computer and use it in GitHub Desktop.
Comparing random() and random_by_id_shuffle() on sqlite3 and postgres
DB=sqlite3 ruby test/benchmark_test.rb
DB driver: sqlite3
Using 1.9.2 AR 3.2.13 with sqlite3
Loaded suite test/benchmark_test
Started
-------------------------------------
Time to populate 10,000,000 rows: 1102.7106530666351s
random(1), avg: 18.829100692272185s (55.41% faster)
random_by_id_shuffle(1), avg: 42.231236004829405s
random(10), avg: 20.207807648181916s (52.24% faster)
random_by_id_shuffle(10), avg: 42.31214001178741s
random(50), avg: 22.443508899211885s (46.46% faster)
random_by_id_shuffle(50), avg: 41.919328558444974s
random(100), avg: 26.120035099983216s (38.34% faster)
random_by_id_shuffle(100), avg: 42.362687063217166s
random(250), avg: 26.95281069278717s (36.65% faster)
random_by_id_shuffle(250), avg: 42.54290119409561s
-------------------------------------
Time to populate 1,000,000 rows: 13.883656978607178s
random(1), avg: 1.8528056502342225s (53.91% faster)
random_by_id_shuffle(1), avg: 4.019701445102692s
random(10), avg: 1.9997926473617553s (50.81% faster)
random_by_id_shuffle(10), avg: 4.065062153339386s
random(50), avg: 2.2064947128295898s (47.57% faster)
random_by_id_shuffle(50), avg: 4.208296811580658s
random(100), avg: 2.541466701030731s (39.5% faster)
random_by_id_shuffle(100), avg: 4.200597739219665s
random(250), avg: 2.646264445781708s (36.99% faster)
random_by_id_shuffle(250), avg: 4.199914753437042s
-------------------------------------
Time to populate 100,000 rows: 1.3082890510559082s
random(1), avg: 0.18094995021820068s (55.08% faster)
random_by_id_shuffle(1), avg: 0.4028286933898926s
random(10), avg: 0.19761059284210206s (49.66% faster)
random_by_id_shuffle(10), avg: 0.3925348401069641s
random(50), avg: 0.22198199033737182s (45.69% faster)
random_by_id_shuffle(50), avg: 0.4087666392326355s
random(100), avg: 0.22314568758010864s (46.92% faster)
random_by_id_shuffle(100), avg: 0.4204226851463318s
random(250), avg: 0.2806596040725708s (36.28% faster)
random_by_id_shuffle(250), avg: 0.4404726028442383s
-------------------------------------
Time to populate 10,000 rows: 0.11606597900390625s
random(1), avg: 0.017534005641937255s (57.1% faster)
random_by_id_shuffle(1), avg: 0.04087449312210083s
random(10), avg: 0.019865202903747558s (51.04% faster)
random_by_id_shuffle(10), avg: 0.04057130813598633s
random(50), avg: 0.023113954067230224s (44.75% faster)
random_by_id_shuffle(50), avg: 0.041835463047027587s
random(100), avg: 0.026287496089935303s (39.07% faster)
random_by_id_shuffle(100), avg: 0.043144392967224124s
random(250), avg: 0.03904709815979004s (22.79% faster)
random_by_id_shuffle(250), avg: 0.050575292110443114s
.
Finished in 8345.587737 seconds.
1 tests, 0 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 32788
DB=postgres ruby test/benchmark_test.rb
DB driver: postgres
ERROR: permission denied to create database
Using 1.9.2 AR 3.2.13 with postgres
NOTICE: CREATE TABLE will create implicit sequence "artists_id_seq" for serial column "artists.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "artists_pkey" for table "artists"
NOTICE: CREATE TABLE will create implicit sequence "albums_id_seq" for serial column "albums.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "albums_pkey" for table "albums"
Loaded suite test/benchmark_test
Started
-------------------------------------
Time to populate 10,000,000 rows: 7951.624568223953s
random(1), avg: 5.918170940876007s (85.49% faster)
random_by_id_shuffle(1), avg: 40.781468749046326s
random(10), avg: 5.940257751941681s (83.35% faster)
random_by_id_shuffle(10), avg: 35.67704379558563s
random(50), avg: 5.918898487091065s (83.63% faster)
random_by_id_shuffle(50), avg: 36.15551409721375s
random(100), avg: 5.924346649646759s (83.72% faster)
random_by_id_shuffle(100), avg: 36.383730947971344s
random(250), avg: 5.940438055992127s (84.4% faster)
random_by_id_shuffle(250), avg: 38.08365190029144s
-------------------------------------
Time to populate 1,000,000 rows: 79.25174498558044s
random(1), avg: 0.9308391571044922s (78.41% faster)
random_by_id_shuffle(1), avg: 4.310875499248505s
random(10), avg: 0.9131646513938904s (75.66% faster)
random_by_id_shuffle(10), avg: 3.751894640922546s
random(50), avg: 0.9309792518615723s (75.82% faster)
random_by_id_shuffle(50), avg: 3.849833357334137s
random(100), avg: 0.9280086040496827s (76.25% faster)
random_by_id_shuffle(100), avg: 3.9068794012069703s
random(250), avg: 0.9218217492103576s (76.47% faster)
random_by_id_shuffle(250), avg: 3.9171346068382262s
-------------------------------------
Time to populate 100,000 rows: 7.2527501583099365s
random(1), avg: 0.43009945154190066s (45.9% faster)
random_by_id_shuffle(1), avg: 0.7950377464294434s
random(10), avg: 0.4361409068107605s (39.36% faster)
random_by_id_shuffle(10), avg: 0.7192211389541626s
random(50), avg: 0.4312728524208069s (39.6% faster)
random_by_id_shuffle(50), avg: 0.7140729904174805s
random(100), avg: 0.43085269927978515s (43.68% faster)
random_by_id_shuffle(100), avg: 0.7649938464164734s
random(250), avg: 0.4430608034133911s (38.67% faster)
random_by_id_shuffle(250), avg: 0.7224304914474488s
-------------------------------------
Time to populate 10,000 rows: 0.91068434715271s
random(1), avg: 0.37840344905853274s (7.11% faster)
random_by_id_shuffle(1), avg: 0.40735535621643065s
random(10), avg: 0.3792749047279358s (30.17% faster)
random_by_id_shuffle(10), avg: 0.5431696534156799s
random(50), avg: 0.38295539617538454s (5.76% faster)
random_by_id_shuffle(50), avg: 0.40637620687484743s
random(100), avg: 0.38781850337982177s (5.58% faster)
random_by_id_shuffle(100), avg: 0.4107487559318542s
random(250), avg: 0.39152764081954955s (7.31% faster)
random_by_id_shuffle(250), avg: 0.4224120855331421s
.
Finished in 13082.458287 seconds.
1 tests, 0 assertions, 0 failures, 0 errors, 0 skips
Test run options: --seed 40500
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment