この記事では、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 で正規表現を使用してワイルドカードドメイン名を自動的に一致させる方法
序文この記事では主に、MySQLに大量のデータを挿入する4つの方法を紹介し、参考と学習のために共有し...
1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...
c3p0の使用c3p0jarパッケージをインポートする <!-- https://mvnrep...
:動的コンポーネントv-bind:is="component name" を使用...
目次序文1. 基本データ2. 継承駆動設計3. 左右の値のエンコーディングに基づく設計4. ツリー構...
Linux touch コマンドの詳細な説明: 1. コマンド機能:ファイルまたはディレクトリの作成...
Microsoft IE 5.0 がリリースされる前は、Web プログラミングにおける最大の課題は、...
以下のように表示されます。昨日: UNIX_TIMESTAMP(CAST(SYSDATE() AS ...
PHP7 がリリースされてからかなり時間が経ちますが、パフォーマンスが大幅に向上したことはよく知られ...
現在の日付を照会する CURRENT_DATE() を選択します。 CURDATE() を選択する;...
1. コントロールパネルで、MySQLのすべてのコンポーネントをアンインストールします。コントロール...
最近、あるウェブサイトのバックエンドに一連の統計機能を追加していたのですが、条件によるカウントが必要...
必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...
レイアウト部分: <div id="スライダー"> <!-- ...
この記事では、Docker で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は...