java - 不为 Java 中的 SQL 查询解析整个表的方法 - JDBC
问题描述
假设我们有一个非常大的表,并且我们有以下形式的查询(这只是一个示例)
SELECT personID FROM people WHERE birthYear>2010 LIMIT 50
我想最大化获取该查询结果的性能,问题是数据库将解析整个表以找到匹配条件的元组,然后返回前 50 个。如果我们有一个数据库,那就是一个问题数百万或数十亿的元组。
Java - JDBC或SQL中有没有办法不解析整个表并逐步解析它并获取与条件匹配的前50行,或者例如解析前1000行并获取所有匹配的行并继续获取当用户单击“显示更多”按钮时,更多结果?
感谢您的时间。
解决方案
问题不是真的。以下是对可能发生的情况的分析:
SELECT personID FROM people WHERE birthYear>1900 LIMIT 50
SELECT personID FROM people WHERE birthYear>2010 LIMIT 50
案例1:没有出生年份索引:
- 1900:它只会扫描表,直到 50 行匹配该
WHERE
子句。这可能是前50个。 - 2010:它将扫描大部分或全部表格,除非它是幼儿目录。因此,它可能需要读取所有行才能找到 50。
案例2:以birthYear开头的索引:
它将跳转到索引中间的第一个值 >1900(或 >2010),然后抓取接下来的 50 行(或更少)。对于这些行中的每一行,它将到达表中personID
。
案例3 INDEX(birthYear, personID)
::
与案例 2 一样,但不需要“伸手可及”。这是因为personID
是索引的一部分。
只有在情况 1 中,并且只有少于 50 行的 >1900(似乎不太可能),它才会扫描整个表。案例 2 和 3 在 50 处立即停止。
推荐阅读
- python - 如何使用派生类中的新信息覆盖基类方法?
- angular - 在角形中为小吃店应用不同背景颜色时面临的问题
- apl - APL点运算符的语义?
- android - 专注于 RecyclerView android tv
- asp.net - ASP.NET Core Web 项目将“%LAUNCHER_ARGS%”命令行参数作为未扩展的环境变量传递
- json - JSON 到新的 GeoJSON
- flutter - Flutter 中的文本文件编辑
- c++ - Deitel 和 Deitel 所说的“不应将具有副作用的表达式传递给宏”是什么意思?
- javascript - 从html代码中按下按钮时执行javascript?
- javascript - 由于音频播放器 - JS,网站性能太低了