Jeg foreslår en hurtigere måde.
Få rækkeantallet:
SELECT CEIL(COUNT(*)/2) FROM data;
Tag derefter den midterste værdi i en sorteret underforespørgsel:
SELECT max(val) FROM (SELECT val FROM data ORDER BY val limit @middlevalue) x;
Jeg testede dette med et 5x10e6-datasæt med tilfældige tal, og det vil finde medianen på under 10 sekunder.
Dette vil finde en vilkårlig percentil ved at erstatte COUNT(*)/2
med COUNT(*)*n
hvor n
er percentilen (.5 for median, .75 for 75. percentil osv.).