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