php – MySQL查询中是否有2个限制?

好的是这种情况(使用PHP / MysqL)你从大型MysqL表中获得结果,
假设您的mySQL查询返回10,000个匹配结果,并且您有一个分页脚本,每页显示20个结果,您的查询可能如下所示

所以第1页查询

SELECT column 
FROM table_name 
WHERE userId=1 
AND somethingelse=something else
LIMIT 0,20

所以第2页查询

SELECT column 
FROM table_name 
WHERE userId=1 
AND somethingelse=something else
LIMIT 20,40

现在您一次抓取20个结果,但总共有10,000行符合您的搜索条件,

如何只返回10,000个结果中的3,000个,并且在查询中仍然使用LIMIT 20进行每页20个的分页

我认为这是不可能的,但是myspace在那里以某种方式浏览页面,我知道他们不是在使用PHP / MysqL,但它是如何实现的?

UPDATE

我看到有些人回复了几种方法,看起来这些都不会通过将数量限制在3000来提高性能吗?

解决方法:

PHP进行编程,以便当它发现自己准备发出以LIMIT 3000,20或更高版本结尾的查询时,它就会停止并且不会发出查询.

或者我错过了什么?

更新:

MysqL很好地对待LIMIT子句.

除非您的查询中有sql_CALC_FOUND_ROWS,否则只要找到足够的记录来满足您的查询,MysqL就会停止解析结果,排序等.

当你有这样的东西:

SELECT  column 
FROM    table_name 
WHERE   userId=1 
        AND somethingelse='something else'
LIMIT 0, 20

,MysqL获取满足条件的前20条记录并停止.

无论有多少记录符合标准:50或1,000,000,性能将是相同的.

如果您向查询添加ORDER BY并且没有索引,那么MysqL当然需要浏览所有记录以找出前20个.

但是,即使在这种情况下,它也不会对所有10,000个进行排序:它将具有前20个记录的“运行窗口”,并且只有在找到值大(或小)足以进入的窗口时才在此窗口内排序.窗口.

这比排序整个无数要快得多.

然而,MysqL在管道传输recorsets方面并不擅长.这意味着这个查询

SELECT  column 
FROM    (
        SELECT  column
        FROM    table_name 
        WHERE   userId=1 
                AND somethingelse='something else'
        LIMIT 3000
        )
LIMIT 0, 20

性能比第一个更差.

MysqL获取3,000条记录,将它们缓存在临时表(或内存)中,然后仅应用外部LIMIT.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...