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`