Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何添加大偏移量?_Mysql_Sql_Datatables - Fatal编程技术网

Mysql 如何添加大偏移量?

Mysql 如何添加大偏移量?,mysql,sql,datatables,Mysql,Sql,Datatables,我使用mysql work bench运行了这两个查询: 按bussId ASC limit 250000从tempBusiness order中选择bussId,1 按bussId ASC limit 1,1从临时业务订单中选择bussId 第一个未完成运行,第二个返回bussId的速度非常快(0.096秒/0.000016秒) 以下是对上述两个问题的解释: 一, 二, 可能有什么问题?为了在索引列中获得偏移量N,它必须按顺序扫描索引。如果偏移很小,则会很快完成。但是要获得一个非常大的索引

我使用mysql work bench运行了这两个查询:

  • 按bussId ASC limit 250000从tempBusiness order中选择bussId,1

  • 按bussId ASC limit 1,1从临时业务订单中选择bussId

  • 第一个未完成运行,第二个返回bussId的速度非常快(0.096秒/0.000016秒)

    以下是对上述两个问题的解释:

    一,

    二,


    可能有什么问题?

    为了在索引列中获得偏移量
    N
    ,它必须按顺序扫描索引。如果偏移很小,则会很快完成。但是要获得一个非常大的索引,比如
    250000
    ,它必须将索引中的许多条目加载到内存中


    我不认为有任何好的方法来优化这个。如果您有顺序ID字段,您可以使用
    其中ID=250000
    而不是使用
    限制

    @popovitsj no!它不应该返回250000行,它应该返回一行,但偏移量是250000!这是很常见的,因为当您限制来自一个大数字的数据时,优化器可能会执行完整的表扫描,但是这可以通过另一种方式实现,即在索引列上使用范围过滤器,例如
    SELECT bussId from tempBusiness where bussId>250000 order by bussId limit 1
    @AbhikChakraborty。优化器实际上应该执行完整的索引扫描,而不是完整的表扫描。“这似乎就是它在做的事情。”大卫,我就是这么说的。但我想这两个查询在这方面应该没有什么区别,所以我不认为它与内存有任何关系。@popovitsj对于较小的数字,它是有效的,但是为什么当数字较大时,返回结果需要很长时间,我尝试使用其他表,它会快速返回一个结果。谢谢你的回答,但是为什么当我尝试在另一个表中使用不同表名的相同查询时,mysql会快速返回一个结果。哪个索引,你指的是主键?是的,主键是索引
    EXPLAIN
    说它正在使用索引。所以可能在tempBusiness表中,索引还没有完成加载?对。如果在一行中使用大偏移量尝试两个查询,会发生什么情况?