我有一个非常简单的表格:
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
我不确定,这是最好/最有效的方法。
任何人都可以给我一个提示?