この記事では、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 で正規表現を使用してワイルドカードドメイン名を自動的に一致させる方法
この記事では、主に、IDEA を MYSQL データベースに接続するための構成時に失敗する問題の解決...
考えられる理由: Seata が MySQL 8 をサポートしない主な理由は、接続ドライバーがバージ...
方法1:リスピンを使用するには、次の手順に従ってください。 sudo add-apt-reposit...
序文当社の MySQL オンライン環境のほとんどはバージョン 5.7.18 を使用しています。このバ...
目次序文1. どのような変数が促進されますか? 2. 可変プロモーションがあるのはなぜですか? (1...
昨日、円形のプログレスバー (Vue 円形プログレスバーを参照してください) についてブログを書きま...
目次1. フックとは何ですか? 2. フックはなぜ現れるのでしょうか? 3. よく使われるフックは何...
通常、全員のスピーチを最初から最後まで読む必要があります。ただし、Stack Overflow には...
目次1. JavaScriptについて2. JavaScript イベントループ3. マクロタスクと...
CSS3 は、要素の 2D 平面変換と視覚的な 3D 空間変換を実装します。2D 変換はより頻繁に使...
ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...
MySQLは重複データを処理します一部の MySQL テーブルには重複レコードが含まれている場合があ...
1. 機能主にコンポーネントの状態を保持したり、再レンダリングを回避したりするために使用されます。 ...
この記事では、MySQL の ROUND 関数を使用した丸め操作の落とし穴を例を使って説明します。ご...
画像プレビュー機能付きのアップロードフォーム、完全なHTMLコードは次のとおりです。 <htm...