我得到的數據庫查詢對於我當前的實現來說太慢了。我需要從數據庫中獲取所有電影,並且對於這些電影中的每一部電影,我都需要從另一個表中獲取其文件數據所以對於每部電影我都在做另一個查詢。對於每個候選條目,我需要對數據庫中的每部電影進行比較。這是否需要5-10秒才能執行大約500名候選人?MySQL,JDBC查詢執行時間太長
// get movies with all their versions
private ArrayList<Movie> getDatabaseMovies(Connection conn) throws Exception {
PreparedStatement getMoviesStmt = conn.prepareStatement("SELECT movieid, title FROM movies", Statement.RETURN_GENERATED_KEYS);
ArrayList<Movie> movies = new ArrayList<Movie>();
try {
ResultSet rs = getMoviesStmt.executeQuery();
while (rs.next()) {
Movie movie = new Movie(rs.getString(2), getDatabaseMovieFiles(conn, rs.getInt(1)));
movies.add(movie);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
getMoviesStmt.close();
}
return movies;
}
public ArrayList<MovieFile> getDatabaseMovieFiles(Connection conn, int movieID) throws Exception {
ArrayList<MovieFile> movieFiles = new ArrayList<MovieFile>();
PreparedStatement stmt = conn.prepareStatement("SELECT filename, size, hash, directory FROM file_video WHERE movieid = ?");
try {
stmt.setInt(1, movieID);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
MovieFile movieFile = new MovieFile(rs.getString(1), rs.getLong(2), rs.getBytes(3), rs.getString(4));
movieFiles.add(movieFile);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
stmt.close();
}
return movieFiles;
}
準備好的陳述的想法是,我們*準備*一個*陳述*一次*重複使用不同的值。 – 2011-06-06 05:53:49
我不想聽起來過於苛刻或輕浮,但這是一些基本的東西。也許某種「關係數據庫簡介」是爲了?那裏有很多優秀的免費資源。我擔心即使你會在這裏得到正確的答案,你仍然會錯過很多你最終需要的基礎。 – Dmitri 2011-06-06 06:19:37
我想增加'光顧',我也不想聲音光顧。 – Dmitri 2011-06-06 06:20:16