1

私はそのような非常に単純なテーブルを持っています:

CREATE TABLE IF NOT EXISTS availables (   
   IdMat     TINYINT,  
   size      INT, 
PRIMARY KEY(IdMat ) )

このテーブルには 7 285 000 行あります。サイズの数に基づいて 10 十分位数を計算するための最良のアプローチを検索します。

指定された十分位数を計算するために、この単純で高速な方法を実行します。

CREATE PROCEDURE `TEST`()
BEGIN

CREATE TEMPORARY TABLE IF NOT EXISTS tableInMemory ENGINE=MEMORY AS (SELECT size FROM availables ORDER BY size ASC);
SELECT COUNT(size) INTO @myvar FROM tableInMemory ;

PREPARE STMT FROM "SELECT size INTO @rank FROM tableInMemory LIMIT ?,1;"; 
SET @x = 1;
WHILE @x  <= 9 DO
   SET @idx = FLOOR(@myvar * @x / 10) - 1;
   EXECUTE STMT USING @idx;
   SELECT @rank AS 'Value', COUNT(size) AS 'Count' FROM tableInMemory WHERE size < @rank;
   SET  @x = @x + 1; 
END WHILE;
DEALLOCATE PREPARE STMT;

END

よくわかりませんが、これが最善/最も効果的なアプローチです。

誰でも私にヒントを与えることができますか?

4

0 に答える 0