一个过程或循环

我有一个名为 messages 的表格,本地枢纽的用户在其中存储他们的消息(类似于网络论坛)。目前,大多数用户都在参与其中,我每天会得到近30到50个新的表格条目。

由于这已经持续了过去几年,我们在表中得到了近10万行数据。表结构有点像这样。其中 fidPRIMARY,而 ipid(昵称)只是 INDEX

直到现在,我一直在使用这种类型的查询,然后在luasql中迭代结果集,如此链接所示。根据我的经验,这会消耗大量的时间和空间(在缓冲区中)。

`msg` VARCHAR(280)NOT NULL
`id` VARCHAR(30)NOT NULL
`ctg` VARCHAR(10)NOT NULL
`date` DATE NOT NULL COMMENT 'date_format(%m /% d /%y)'
`time` TIME NOT NULL COMMENT 'date_format(%H:%i:%s)'
`fid` BIGINT(20)NOT NULL AUTO_INCREMENT,
`ip` CHAR(39)NOT NULL DEFAULT '127.0.0.1'

我的问题是现在,我们转换为了 PtokaX 的新API,读写请求的数量急剧增加。由于我最近了解到MySQL过程,我在想这些过程是否是这种情况的更快或更安全的处理方式。

SELECT *
FROM ( SELECT *
    FROM `messages`
    ORDER BY `fid` DESC
    LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;

P.S.

平均每7到10秒会获得一个阅读一条信息的请求。在周末,这个数字会增加到大约每3秒钟一个。

如果需要更多信息,请告诉我。


总之

是否有一种方法可以调用存储过程并在更短的时间内获得最终结果。当前的查询(和方法)需要 nearly 3 秒才能获取和组织数据。

点赞
用户679449
用户679449

关于您的查询有一些事项:

SELECT *
FROM ( SELECT *
    FROM `messages`
    ORDER BY `fid` DESC
    LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;
  1. 绝不要SELECT *(全部选择),总是要指定列清单(你需要的列)
  2. 子查询通常代价更高(用于排序和存储)
  3. 如果您尝试获取底部的'50',请尝试使用BETWEEN子句

您始终可以使用EXPLAIN来查看您的查询正在执行的操作。 我会尝试以下查询:

SELECT `msg`,`id`,`ctg`,`date`,`time`,`fid`,`ip`FROM `messages`
WHERE `fid`>(SELECT MAX(`fid`)-50 FROM`messages`)
ORDER BY`fid`
2012-09-08 20:34:01