この記事では、MySQL 最適化のヒントで重複したエントリを削除する方法を例を使って説明します。ご参考までに、詳細は以下の通りです。 重複排除に関しては、特に出力量が大きい場合には頭が痛くなってしまいます。結局のところ、私はプロの DB ではないので、自分に合った重複排除方法を考え出すことしかできません。 まず、通常の最初の段落に従い、having 関数を使用して重複をチェックし、重複を 1 つずつ削除します。重複を検出するための SQL の書き方を私に聞かないでください。それはご存知でしょう。 。 。重複が少数の場合はこれで問題ありません。何千、何万もの異なるデータの重複があったらどうなるでしょうか? 。 。 完了したら、クエリに having 関数を使用する場合、元の SQL は次のようになると考えてみましょう。 count>1 を持つ `name` の文グループから、`name`,count(*) を count として選択します。 実行してみて実感できますが、データが500万個くらいあると、そのスピードはごま油のようです。 。 。 ただし、実行速度の最適化を考慮せずに、このステートメントを使用して配列から重複する項目を削除することを検討しましょう。まず、重複データを削除するときにどのデータを使用する必要があるかを知る必要があります。 IDは確かで、その後にフィルタリング条件ですよね?では、上記の SQL によってクエリされたデータには何が欠けているのでしょうか? ID です。 。 。次に、このフィールドを追加して試してみましょう。 count>1 を持つ `name` の文グループから、id、`name`、count(*) を count として選択します。 その結果、id、name、count の 3 つのフィールドが表示されます。具体的な効果を確認するには、自分で実行してみてください。このデータに基づいて重複を削除できます。 具体的な SQL 設計は、クエリした ID ではない ID を削除しますが、名前の値はクエリした値です。データは 1 つではないため、プログラムで処理する必要があります。すべての ID はカンマで連結され、名前の値は引用符とカンマで処理されます。その後、使用できます。例を以下に示します。 文から、IDが(1,2,3)に含まれず、名前が('a','b','c')に含まれるものを削除します。 データが多すぎる場合は、スクリプトに書き込み、完了したらバッチで操作を実行できます。重複を削除できるようになりましたが、速度にはまだ問題があります。次に、この SQL を最適化して速度を上げる方法を検討する必要があります。これで完了です。 SQL の実行速度を向上させるには、常識的に考えて、まずインデックスについて考えます。さて、これ以上何も言わずに、まずインデックスを作成しましょう。しかし、そのフィールドを作成するのはどうでしょうか? ? ?これはまた別の問題です。 この原則は、名前フィールドによって区別できるフィールドに基づいています。たとえば、名前フィールドにはブランド名が保存され、各ブランドの業界を保存する業界フィールドがあるため、業界フィールドにインデックスを作成しました。もちろん、もっと適切なものもあるでしょうが、それは考え方次第です。では、早速、最適化された SQL を見てみましょう。 業界 = 'ドリンク' の文から、id、`name`、count(*) を count として選択し、count>1 を持つ `name` でグループ化します。 結果は次のとおりです。 結果には何が表示されますか? インデックスが使用中であることがわかります。 。 。スピードに関しては、私が言わなくても皆さんは理解しているはずです。その後、プログラムを使用してすべての ID をコンマで連結し、名前の値を引用符とコンマで処理します。その後、重複を削除するタスクに進むことができます。効率が大幅に向上しました。 。 。 ただし、読者によっては、いいね!などの条件を含む条件を使用してインデックスが無効になる場合があります。その場合は、データを分類し、各カテゴリのデータを個別にチェックし、すべてのデータをクエリした後、プログラムを使用して重複をチェックし、削除が必要なデータを削除します。 付録: MySQL RAND クエリの最適化とランダム クエリの最適化 ランダムクエリに関しては、誰もが rand() 関数を使用することは知っていますが、データ量が一定レベルに達すると、クエリの効率は想像に難くありません。だから何?このクエリを最適化することを検討してみましょう。 私の最適化方法は、プログラムを使用してランダム化し、制限を使用して値を取得することです。大まかな考え方を記録しておきましょう。 まず、条件を満たすデータの数を照会し、次に PHP の rand 関数を使用してこの数値範囲内の値をランダムに選択し、直接照会します。 例のSQL: 誰でも試すことができます。約 500 万個のデータの場合、クエリ速度は MySQL RAND 関数クエリ方法よりも少なくとも 10 倍高速です。 さて、今回の共有はこれですべてです。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: Vue 開発ツリー構造コンポーネント (コンポーネント再帰)
>>: nginx で正規表現を使用してワイルドカードドメイン名を自動的に一致させる方法
1. フレックスレイアウト 。父親 { ディスプレイ: フレックス; コンテンツの中央揃え: 中央;...
序文この記事では、Windows で Mysql をバックアップするための簡単な BAT スクリプト...
Web ページのスタイル設定に関しては、プロジェクトで純粋な CSS または SCSS (および他...
書き方1: sas_order_supply_month_pay セットを更新 RECEIVE_TI...
目次ドロップダウン複数選択ボックスアップグレード - すべてのオプションを追加改訂と改善を求める製品...
目次不規則なフォームの実装透明な部分をクリックする不規則なフォームの実装ここでは円形フォームを実装し...
目次序文: 1. vue-cliでプロジェクトを作成する2. ルーターをインストールする3. ディレ...
まずは見てみましょう。 HTML ソースコード: XML/HTML コードコンテンツをクリップボード...
目次1. 準備Redisイメージを取得する2. Redis Sentinel マスタースレーブモード...
目次1. SVNとは何か2. SVNサーバーとクライアントの取得方法3. SVN ワークフローとアー...
pre 要素は、フォーマット済みのテキストを定義します。 pre 要素で囲まれたテキストでは、通常、...
目次序文基本的な紹介コードの実装基本構造アップロード分析Excel にエクスポート基本構造Excel...
目次1. サービスの開始と停止の手順1.1 Windows での MySQL 5.7 の公式 MSI...
私はしばらく MGR と連絡を取り合ってきました。MySQL 8.0.23 の登場により、MySQL...
HTML と CSS は誰もが知っていると思います。HTML の構造と CSS の表現の分離も知って...