Mysql 程序或循环
我有一个名为Mysql 程序或循环,mysql,stored-procedures,lua,luasql,ptokax,Mysql,Stored Procedures,Lua,Luasql,Ptokax,我有一个名为messages的表,本地中心的用户在其中存储他们的消息(有点像网络论坛)。目前,大多数用户都在参与,我每天都会收到近30到50条新条目 由于这种情况已经持续了几年,表中有近100000行数据。表结构有点复杂。其中,fid是主和ip和id(昵称)只是索引 我正在使用;然后在中迭代结果集。根据我的说法,这会消耗大量的时间和空间(在缓冲区中) 我的问题是,现在我们已经切换到新的APIPtokaX,读写请求的数量急剧增加。因为,我最近读到了关于MySQL过程的文章,我在想这些过程是否是处理
messages
的表,本地中心的用户在其中存储他们的消息(有点像网络论坛)。目前,大多数用户都在参与,我每天都会收到近30到50条新条目
由于这种情况已经持续了几年,表中有近100000行数据。表结构有点复杂。其中,fid
是主和ip
和id
(昵称)只是索引
我正在使用;然后在中迭代结果集。根据我的说法,这会消耗大量的时间和空间(在缓冲区中)
我的问题是,现在我们已经切换到新的APIPtokaX,读写请求的数量急剧增加。因为,我最近读到了关于MySQL过程的文章,我在想这些过程是否是处理这种情况的更快、更安全的方法
SELECT *
FROM ( SELECT *
FROM `messages`
ORDER BY `fid` DESC
LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;
附笔。
我们平均每7到10秒收到一次阅读一条消息的请求。在周末,它会上升到大约每3秒一次
如果还需要什么,请告诉我
总结
这是一种我可以调用存储过程并在更短时间内得到最终结果的方法。当前的查询(和方法)需要将近3秒钟的时间来获取和组织数据。有关您的查询的几件事:
SELECT *
FROM ( SELECT *
FROM `messages`
ORDER BY `fid` DESC
LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;
从不选择*
(全部);始终指定列列表(您需要的)
子查询通常成本更高(用于排序和存储)
如果试图获取底部的“50”,请尝试使用BETWEEN
子句
通过使用EXPLAIN
,您总是可以看到您的查询在做什么。我将尝试以下查询:
SELECT `msg`, `id`, `ctg`, `date`, `time`, `fid`, `ip` FROM `messages`
WHERE `fid` > (SELECT MAX(`fid`)-50 FROM `messages`)
ORDER BY `fid`
如果您发布查询和表结构,我们可能会帮助您优化它。@Jocelyn I/did/put指向这些粘贴的链接。不管怎样,编辑了这个问题。请检查。您使用MAX(id)
的想法非常好,但您看到有一个名为category(或论坛标题)的专栏,讨论将在该专栏上进行。我希望这些值也作为变量传递给过程。在luasql中,我要做的是对照几个条件进行检查,并适当地设置查询。
SELECT `msg`, `id`, `ctg`, `date`, `time`, `fid`, `ip` FROM `messages`
WHERE `fid` > (SELECT MAX(`fid`)-50 FROM `messages`)
ORDER BY `fid`