84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
具体需求
数据库里存在100万条数据;
要导入10万条数据;
如果要导入的数据在数据表里存在,则终止数据导入;
疑问
如何在每条数据需要对比的情况下快速导入,同时导入失败进行数据回滚?
认证高级PHP讲师
ターゲットテーブルをターゲット(100万データ)、インポートするテーブルをソース(10万データ)と呼ぶとします。 この例で消費される時間の大部分は、2 つのテーブルのレコードが同じであるかどうかを判断することであり、おそらく作成者は、それらが同一であるとみなされる前に すべてのフィールド (ID フィールドを除く) が同じであることを望んでいるのだと思います。同じ記録。
次に、次のステートメントを使用してデータをインポートします リーリー
取引効率を考えると高くないといけません
個人的なアイデアについては以下を参照してください:
1.まず挿入するデータが存在するかどうかを確認します
ID in('k1,k2,k3');
2. データベースに SQL を書き込みます
10w データ、1 SQL、挿入速度、2 秒以内に解決
以前書いた、一度に20wのデータ挿入を3秒で完了するように最適化した記事を読むことができますhttps://my.oschina.net/popular...
私の個人的な考えは、インポート時に重みを判断し、一意性を確保するために一意のインデックスを確立することが重要です。バッチインポートについては、@石记の方法を参照してください。
この問題をもとに、その後のインポート時に大きな問題が発生し、データインポートが遅かったので、これについて記事を書きました:
/a/11...
後で見て誰かの参考になれば幸いです。
ターゲットテーブルをターゲット(100万データ)、インポートするテーブルをソース(10万データ)と呼ぶとします。
各レコードのハッシュに似た値を計算し、ターゲットとソースの新しく作成されたフィールドに格納できます (hashValue)。計算量は 110 万です。この例で消費される時間の大部分は、2 つのテーブルのレコードが同じであるかどうかを判断することであり、おそらく作成者は、それらが同一であるとみなされる前に すべてのフィールド (ID フィールドを除く) が同じであることを望んでいるのだと思います。同じ記録。
次に、次のステートメントを使用してデータをインポートします
リーリー
取引効率を考えると高くないといけません
個人的なアイデアについては以下を参照してください:
1.まず挿入するデータが存在するかどうかを確認します
ID in('k1,k2,k3');
のテーブルからIDを選択2. データベースに SQL を書き込みます
10w データ、1 SQL、挿入速度、2 秒以内に解決
以前書いた、一度に20wのデータ挿入を3秒で完了するように最適化した記事を読むことができます
https://my.oschina.net/popular...
私の個人的な考えは、インポート時に重みを判断し、一意性を確保するために一意のインデックスを確立することが重要です。バッチインポートについては、@石记の方法を参照してください。
この問題をもとに、その後のインポート時に大きな問題が発生し、データインポートが遅かったので、これについて記事を書きました:
/a/11...
後で見て誰かの参考になれば幸いです。