排行榜之Mysql OrderBy实现
1、排行榜系统的功能点
2、排行榜系统基本功能要素
MySQL实现方案
数据量较小,业务场景比较简单。可直接使用
-
新建表
CREATE TABLE leaderboard( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键id', `name` VARCHAR(50)NOT NULL COMMENT'玩家名称', score INT NOT NULL COMMENT '分数', PRIMARY KEY (id )) COMMENT'排行榜';
-
增加信息
INSERT INTO leaderboard(name, score) VALUES ('p1', 1), ('p2',2), ('p3',3), ('p4',4), ('p5',5), ('p6' ,6), ('p7',7), ('p8', 8), ('p9',9), ('p10', 10), ('pl1' ,11), ('p12' ,12);
-
查询排行榜
SELECT name, score FROM leaderboard ORDER BY score DESC LIMIT 10;
-
清除过期信息
DELETE FROM leaderboard WHERE id=12 LIMIT 1;
-
更新排行分数
UPDATE leaderboard SET score = 11 WHERE id=1 LIMIT 1;
千百万级别数据压测
创造数据
DELIMITER//
CREATE PROCEDURE InsertData()
BEGIN
DECLARE counter INT DEFAULT 1;
DECLARE nameValue VARCHAR(50);
DECLARE scoreValue INT;
WHILE counter<= 1000000 DO
SET nameValue = CONCAT('p', counter);
SET scoreValue = counter;
INSERT INTO leaderboard (name, score)VALUES (nameValue, scoreValue);
SET counter =counter +1;
END WHILE;
END//
DELIMITER;
call InsertData();
执行sql创建insertData函数。然后 执行此函数。创建数据。
直接查询 使用秒数 1.157s
添加索引
ALTER TABLE leaderboard ADD INDEX idx_score(score);
重新查询使用 1.07s 速度快了一点,是有效果的。