120,000 行のユーザー テーブル (MySQL) があります。
List<User> users = session.createQuery("from User").list();
この hibernate クエリの実行には約 6 ~ 9 秒かかります。これを最適化するにはどうすればよいでしょうか。MySQL がボトルネックですか? それとも.list()
通常これは遅いですか?
120,000 行のユーザー テーブル (MySQL) があります。
List<User> users = session.createQuery("from User").list();
この hibernate クエリの実行には約 6 ~ 9 秒かかります。これを最適化するにはどうすればよいでしょうか。MySQL がボトルネックですか? それとも.list()
通常これは遅いですか?
もちろん、クエリは完全なテーブル スキャンを実行するため、低速です。クエリの句を含む、それに関連付けられている他のオブジェクトを結合する必要がwhere
あります。クエリを変更して、限られた数のレコードを返すか、条件 API と射影を使用することができます。
クエリでページネーションを使用します。一度にすべての行を呼び出さないでください。結果の最初の位置と最大結果を設定できます。たとえば、クエリを次のように変更するよりも最初の 100 件の結果を読み取りたい場合:
Query q=session.createQuery("from User");
q.setFirstResult(fistRes);// this will variable
q.setMaxResults(maxRes);// this will also be variable as parameter.