這是我的SQL查詢與我得到的所有的重複,而是一個(最新的):SQL語句佔用大量時間,可以優化它嗎?
SELECT d.C_ContactID, d.C_EmailAddress, d.C_DataSourceID, d.C_DateCreated
FROM duplicates as d
WHERE d.C_DateCreated !=(select max(d2.C_DateCreated)
FROM duplicates d2
WHERE d2.C_DataSourceId = d.C_DataSourceId)
是否有可能以某種方式優化呢?不幸的是,在30萬條記錄中,花費了+ - 40分鐘。
方法,其中的查詢是:
public ArrayList<Record> get() throws SQLException,
ClassNotFoundException {
Statement st = DBConnect.DBC.con.createStatement();
String sql = ("select d.C_ContactID, d.C_EmailAddress, d.C_DataSourceID,
d.C_DateCreated "
+ "from duplicates as d "
+ "where d.C_DateCreated !=(select max(d2.C_DateCreated) "
+ "from duplicates d2 where d2.C_DataSourceId = d.C_DataSourceId)");
ResultSet rs = st.executeQuery(sql);
DBConnect.DBC.con.commit();
while (rs.next()) {
int contactID = rs.getInt("C_ContactID");
String email = rs.getString("C_EmailAddress");
String dataSourceID = rs.getString("C_DataSourceID");
String dateCreated = rs.getString("C_DateCreated");
duplicate = new Record(contactID, email, dataSourceID, dateCreated);
duplicates.add(duplicate);
}
rs.close();
st.close();
return duplicates;
}
你在該表上有任何索引嗎? –
你在使用哪種SQL? – Steve
你的RDBM是什麼?另外將執行計劃添加到您的問題。 –