2010-12-20 35 views
1

我想執行一個select查詢,並能夠得到結果的計數,而不像「TOAD」那樣使用「COUNT(*)」。這個概念是給用戶輸入他想要的任何「選擇查詢」的選項,併爲他計算結果的數量。爲什麼TOAD比我的java代碼更快?

try { 
    selectStatement = globalConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
    ResultSet selectResultSet = selectStatement.executeQuery(selectStatementString); 
    selectResultSet.last(); 
    int countOfResults = selectResultSet.getRow(); 
    writeInLabel(kllStatusLabel, "Count Finished: Found " + countOfResults + " Inserts"); 
} catch (SQLException ex) { 
    writeInLabel(kllStatusLabel, "Error executing select query."); 
} 

此代碼延遲很多行:「selectResultSet.last();」。 TOAD可以延遲很少。 (右鍵單擊 - >記錄計數)。 即使我在TOAD中一直向下滾動結果表,它的速度也會更快。

TOAD如何獲得記錄數?

好的我知道了,我將使用count(*)並且有第二個ResultSet來顯示我的結果。

ResultSet selectResultSet = selectStatement.executeQuery("select count(*) from (" + selectStatementString + ")"); 
int countOfResults = 0; 
if (selectResultSet.next()){ 
    countOfResults = selectResultSet.getInt(1); 
} 
+0

您是否認爲TOAD可以進行順序選擇,即獲取前500條記錄並顯示它們,而您可以瀏覽它,它仍在尋找更多數據?換句話說,你是否認爲TOAD是多線程的,除非另有說明,否則在代碼中看不到多線程? – 2010-12-20 12:21:20

+0

我不是在談論結果,只是計數結果。這就是我想說的。即使簡單的記錄計數在TOAD中也很快。對不起,我沒有給我所有的代碼。我在我的代碼中使用線程。 – 2010-12-20 12:46:09

回答

1

TOAD可能選擇@@rowcount或某些其他數據庫特定的結果元數據。 如果你想要的結果的大小,明確要求數據庫(與COUNT()

如果您使用mysql,那麼你可以使用ROW_COUNT()

+0

謝謝,我的原始消息添加了代碼解決方案。 – 2010-12-20 13:32:14

0

較好地保持COUNT()接近數據庫,提供獨家包含選擇與統計獨立的存儲過程,並獲得從您的代碼存儲過程時,你需要它。

相關問題