[英]Method to not parse the whole table for an SQL Query in Java - 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:沒有關於birthYear 的索引:
WHERE
子句匹配。 這很可能是前 50 名。案例 2:以birthYear開頭的索引:
它將跳到索引的中間,到第一個值 >1900(或 >2010),然后抓取接下來的 50 行(或更少)。 對於這些行中的每一行,它將進入personID
表。
案例 3: INDEX(birthYear, personID)
:
與案例 2 一樣,但它不需要“伸手到桌子上”。 這是因為personID
是索引的一部分。
只有在第 1 種情況下,並且只有當少於 50 行的行數大於 1900(似乎不太可能)時,它才會掃描整個表。 案例 2 和案例 3 在 50 處立即停止。
在這種情況下你必須做兩件事——
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.