首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个过程或一个循环

一个过程或一个循环
EN

Stack Overflow用户
提问于 2012-09-08 17:15:53
回答 1查看 160关注 0票数 0

我有一个名为messages的表,本地集线器的用户在那里存储他们的消息(有点像网络论坛)。目前,大多数用户都在参与,我每天都会收到近30到50个新条目。

由于这已经持续了几年,我们已经有近10万行数据在表中。表结构是一种像这样。其中fidPRIMARYipid(昵称)就是INDEX

我使用这种查询一直持续到现在,然后在如本链接所示,luasql中迭代结果集。据我说,这消耗了大量的时间和空间(在缓冲区中)。

代码语言:javascript
复制
`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过程的文章以来,我一直在想,这些过程是否是一种更快的处理这种情况的更安全的方法。

代码语言:javascript
复制
SELECT *
FROM ( SELECT *
    FROM `messages`
    ORDER BY `fid` DESC
    LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;

附注:

我们平均每7到10秒就有一个请求读取一条消息。在周末,它上升到大约每3秒一次。

如果还需要什么,请告诉我。

要而论之

是我可以调用存储过程并在较短时间内获得最终结果的一种方法。当前的查询(和方法)需要花费近3秒的时间来获取和组织数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-08 20:34:01

有关查询的一些内容:

代码语言:javascript
复制
SELECT *
FROM ( SELECT *
    FROM `messages`
    ORDER BY `fid` DESC
    LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;
  1. 永远不要SELECT * (all);总是指定列列表(您需要什么)
  2. 子查询通常花费更多(排序和存储)
  3. 如果您试图获取底部的'50',尝试使用一个BETWEEN子句代替

通过使用EXPLAIN,您始终可以看到查询在做什么。我将尝试以下查询:

代码语言:javascript
复制
SELECT `msg`, `id`, `ctg`, `date`, `time`, `fid`, `ip` FROM `messages` 
WHERE `fid` > (SELECT MAX(`fid`)-50 FROM `messages`)
ORDER BY `fid` 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12332827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档