嗨我有一个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)
查询执行次数是:
在这两个查询中,我都获取相同数量的记录,但在第二种情况下,它需要更多时间.有人可以解释一下这背后的原因吗?
在没有仔细研究的情况下,我的假设是发生这种情况是因为第一个查询只需要读取第50个记录来返回结果,而第二个查询必须在返回结果之前读取600万个.基本上,第一个查询只是更快地短路.
我认为这与表的构成有很大关系 - 字段类型和键等.
如果记录由固定长度的字段组成(例如CHAR与VARCHAR),则DBMS可以只计算第n条记录的起始位置和跳转位置.如果它的长度可变,则必须读取记录以确定第n条记录的起始位置.类似地,我进一步假设具有适当主键的表比没有这些键的表更快.
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |