この記事では、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 で正規表現を使用してワイルドカードドメイン名を自動的に一致させる方法
疫病のせいで家にこもりきりで、頭がおかしくなりそうなので、パソコンを起動して頭を働かせてみました。今...
注意: スコープアニメーションは使用できません。 ! ! ! GIF経由 <テンプレート>...
1. 背景実際のプロジェクトでは、分散スケジュールされたタスク実行の状況に遭遇することがあります。ス...
データベースの変更または削除操作によってデータ エラーが発生したり、データベースがクラッシュしたりす...
この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共...
次に、2 つのテーブルを作成し、一連の SQL 文を実行します。SQL 文の実行後にテーブル内のデー...
アパッチ スカイウォーキングApache SkyWalking は、マイクロサービス、クラウド ネイ...
テスト環境は、JDBCドライバを使用してMariaDB 5.7でセットアップされています。 <...
目次Redux Toolkitが解決する問題何が含まれていますか? Redux Toolkit AP...
ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...
PHP のコンパイル時に -enable-gd-jis-conv オプションを追加することで発生する...
<p><b>これは太字フォントです</b></p> ...
グリッドレイアウト親要素に追加された属性グリッドテンプレートの列/グリッドテンプレートの行要素の行ま...
パスワード強度検証について: [root@mysql mysql]# mysql -uroot -p...
この記事の例では、ドロップダウンボックス選択コンポーネントを実装するためのjsの具体的なコードを参考...