如何使node.js中的MySQL查询更好

如何使node.js中的MySQL查询更好,mysql,node.js,Mysql,Node.js,在我的web应用程序中,我有一条路由,可以进行两次数据库调用。一个从mysql表中按降序获取15个图像路径,并将它们打印到标记,另一个则循环整个表以进行分页。因此,这两个调用必然会减慢我的web应用程序的速度,因此,如果可能,我如何优化查询。代码如下: router.get('/board', function(req, res){ //GET PAGE NUMBER FOR PAGINATION if(req.query.page){ var page = parseInt(req.q

在我的web应用程序中,我有一条路由,可以进行两次数据库调用。一个从mysql表中按降序获取15个图像路径,并将它们打印到
标记,另一个则循环整个表以进行分页。因此,这两个调用必然会减慢我的web应用程序的速度,因此,如果可能,我如何优化查询。代码如下:

router.get('/board', function(req, res){
//GET PAGE NUMBER FOR PAGINATION
if(req.query.page){
    var page = parseInt(req.query.page);
}else{
    page = 1;
}
var start_from = (page - 1) * 15,
    rows,
    total_pages,
    getPages = connection.query('SELECT COUNT(*) FROM posts', function(err, result){
        rows = result.length;
        total_pages = parseInt(Math.ceil(rows / 15));
    }),
    sql = connection.query('SELECT ID, Title, Img_path FROM posts ORDER BY ID DESC LIMIT ' + start_from + ', 15', function(err, result){    
        res.header("Content-Type", "text/html; charset=utf-8");
        res.render('board', {print: result, pages: total_pages, page_no: page });
    });

}))

尝试此查询以获取行计数,而不是从posts中选择count(1),即使result.length是有效的,您仍然在检索大量的整数,而实际上您并没有使用它们

对于使用
按ID顺序描述限制x,15
的分页结果,最有可能的建议是将其改为
,其中ID介于(x-1)和(x-15)之间,按ID顺序描述限制x,15
(无限制),其中x是在上一个查询/页面上检索到的最低id

当然,这会使“后退”和“前进”变得复杂。您可以通过pageNum
从posts组中选择(ID-1)DIV 15作为pageNum、MIN(ID)、MAX(ID)这样的第一个查询,并实际将结果保存到数组中,并将其用作已知的页面边界。这样做的缺点是:(1)需要调整显示的页码,以便较高的ID值不在最后一页上,(2)需要每隔一段时间检查是否添加了任何新图像。如果ID是自动递增的,那么只需检查是否存在高于当前最大值的内容


此外,如果ID值之间存在间隙,则可能会导致某些页面少于15页(或者如果没有属于该范围的ID号,则页面将完全缺失)。

从帖子中选择ID
?一个
count
query如何?@ceadreak是的,那是一个愚蠢的错误。还有什么我能做的吗?