少し前に作成してリリースしたアプリケーションを振り返っています。当時は最適化の時間はあまりありませんでしたが、今は少し最適化する時間がありました。
次のように、データベースからアイテムを含むオブジェクトをロードするJava DALクラスがあります。
sql = "SELECT COUNT(*) FROM projects";
count = execute(sql) // this returns the count
sql = "SELECT p.*, m.name AS clientName"
...
sql = sql + " FROM projects p"
sql = sql + " LEFT JOIN clients m ON p.clientID = m.id";
Project[] p = execute(sql, count); //this returns Project array
私が抱えている問題は、count スクリプトの実行に 4 秒以上かかり、select スクリプトの実行に約 2 秒かかることです。これはプレゼンテーション レイヤーに非同期で配信されますが、6 秒という待機時間は依然として非常に長い時間です (projects テーブルには約 300 レコードしかありません)。
ストアド プロシージャを追加し、スクリプトに "where active=1" などのフィルターを追加することで、おそらくこれを改善できると考えています。しかし、誰かが全体的により良い解決策を提案できるかどうか疑問に思っていますか?
ありがとう
編集: System.nanoTime() を使用してさらにテストを行ったところ、count スクリプトからの 4 秒 (3.8 秒) の最大のチャンクが 1 行の実行関数内で発生することがわかりました。
Connection c = getCon();
getCon 関数はこれを行います。
if (con == null) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(db_connect_string,db_userid,db_password);
}
...
だから私は今、新しい質問があります.db接続を取得するのに3.8秒かかるのはなぜですか?