假设我们有一个非常大表,并且我们有以下形式的查询(这只是一个示例)
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 一样,但它不需要“伸手到 table 上”。这是因为 personID
是索引的一部分。
仅在情况 1 中,并且只有少于 50 行且>1900(似乎不太可能)时,它才会扫描整个表。情况 2 和 3 立即停止于 50。
关于java - Java 中 SQL 查询不解析整个表的方法 - JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59429844/