sql >> データベース >  >> RDS >> Mysql

5秒以内にhibernateを使用してmysqlに100000行を挿入する必要があります

    考えられるすべての解決策を試した後、最終的に5秒以内に100,000行を挿入する解決策を見つけました!

    私が試したこと:

    1)Hibernate/データベースのAUTOINCREMENT/GENERATEDIDをAtomicIntegerを使用して自己生成されたIDに置き換えました

    2)batch_size=50でbatch_insertsを有効にする

    3)persist()呼び出しの「batch_size」回数ごとにキャッシュをフラッシュする

    4)マルチスレッド(これは試みませんでした)

    最後に機能したのは、ネイティブの複数挿入クエリを使用することでした。 persist()を使用する代わりに、1つのSQL挿入クエリに1000行を挿入します すべてのエンティティで。 100,000個のエンティティを挿入するには、次のようなネイティブクエリを作成します。"INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)" [1つのSQL挿入クエリに1000行挿入]

    今では100,000レコードを挿入するのに約3秒かかります!つまり、ボトルネックはオームそのものでした!一括挿入の場合、機能すると思われるのはネイティブ挿入クエリだけです!



    1. テーブル内の階層データのすべての子ノードをカウントします

    2. try {}catch{}を使用することとif{}else{}を使用することの利点は何ですか。

    3. SQL Serverクエリキャッシュをクリアするにはどうすればよいですか?

    4. SQL Server(T-SQL)でデータ型のリストを返す方法