【发布时间】:2020-09-02 05:38:06
【问题描述】:
我正在制作一个 Discord Level 机器人,每次用户在聊天中键入消息时,该机器人都会插入随机数量的 XP。要查看用户的级别,我有一个 !level 命令。像这样:
sql.query(`SELECT * FROM WMembers where DiscordID = ${message.author.id}`, (err, rows) => {
if(err) console.log(err)
if(!rows[0]) return message.channel.send("The user has no XP!")
let xp = rows[0].XP
let level = rows[0].Level
let nextLevel = level * 40
message.channel.send(**Level: **${level - 1}\n**Points: **${xp} / ${nextLevel}`)
})
但是,当我调用该命令超过 2-3 次时,查询开始执行非常缓慢,需要 5 分钟才能最终返回值。
这是我的 sql 代码:
const pool = mysql.createPool({
host : keys.dbHost,
port : 3306,
user : keys.dbUser,
password: keys.dbPass,
database: keys.dbName
});
let sql = {};
sql.query = function(query, params, callback) {
pool.getConnection(function(err, connection) {
if(err) {
if (callback) callback(err, null, null);
return;
}
connection.query(query, params, function(error, results, fields) {
connection.release();
if(error) {
if (callback) callback(error, null, null);
return;
}
if (callback) callback(false, results, fields);
});
});
};
如果有人可以帮助我,我将不胜感激。谢谢。
【问题讨论】:
-
1.数据库托管在哪里? 2. 那张表的结构是什么 3. 这张表目前有多少行? 4. 你添加了 DiscordID 的数据库索引了吗?
-
数据库托管在一个小型廉价 VPS 上。只有 3 行,一切都已正确设置(DiscordID、XP 等列)。我打算获得更好的 VPS,但我不知道它是否能解决问题。
-
你的 VPS 有多少内存?这是托管在 AWS 上的某个特定数据库还是什么?
-
不,它是专门为 Discord 的机器人设计的,有 128MB RAM。
-
尝试在 MySQL config 中设置
max_connections = 1并重复测试
标签: mysql node.js discord discord.js