我有一个名为messages的表,本地集线器的用户在那里存储他们的消息(有点像网络论坛)。目前,大多数用户都在参与,我每天都会收到近30到50个新条目。
由于这已经持续了几年,我们已经有近10万行数据在表中。表结构是一种像这样。其中fid是PRIMARY,ip和id(昵称)就是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;附注:
我们平均每7到10秒就有一个请求读取一条消息。在周末,它上升到大约每3秒一次。
如果还需要什么,请告诉我。
要而论之
是我可以调用存储过程并在较短时间内获得最终结果的一种方法。当前的查询(和方法)需要花费近3秒的时间来获取和组织数据。
发布于 2012-09-08 20:34:01
有关查询的一些内容:
SELECT *
FROM ( SELECT *
FROM `messages`
ORDER BY `fid` DESC
LIMIT 50 ) AS `temp`
ORDER BY `fid` ASC;SELECT * (all);总是指定列列表(您需要什么)BETWEEN子句代替通过使用EXPLAIN,您始终可以看到查询在做什么。我将尝试以下查询:
SELECT `msg`, `id`, `ctg`, `date`, `time`, `fid`, `ip` FROM `messages`
WHERE `fid` > (SELECT MAX(`fid`)-50 FROM `messages`)
ORDER BY `fid` https://stackoverflow.com/questions/12332827
复制相似问题