QUERY速度与限制和milion记录

its*_*sme 6 php mysql sql

嗨我有一个7milion记录数据库表用于测试查询速度.

我测试了我的2个查询,这些查询是具有不同限制参数的相同查询:

查询1 -

SELECT    * 
FROM      table 
LIMIT     20, 50;
Run Code Online (Sandbox Code Playgroud)

查询2 -

SELECT    * 
FROM      table 
LIMIT     6000000, 6000030;
Run Code Online (Sandbox Code Playgroud)

查询执行次数是:

  1. 查询1 - 0.006秒
  2. 查询2 - 5.500秒

在这两个查询中,我都获取相同数量的记录,但在第二种情况下,它需要更多时间.有人可以解释一下这背后的原因吗?

Age*_*rum 8

在没有仔细研究的情况下,我的假设是发生这种情况是因为第一个查询只需要读取第50个记录来返回结果,而第二个查询必须在返回结果之前读取600万个.基本上,第一个查询只是更快地短路.

我认为这与表的构成有很大关系 - 字段类型和键等.

如果记录由固定长度的字段组成(例如CHAR与VARCHAR),则DBMS可以只计算第n条记录的起始位置和跳转位置.如果它的长度可变,则必须读取记录以确定第n条记录的起始位置.类似地,我进一步假设具有适当主键的表比没有这些键的表更快.


Jak*_*sey 6

我认为减速与你使用偏差限制的事实有关,并且正在查询表而没有额外的索引上下文.它可能第一个更快,因为它可以更快地达到偏移.