MySQLは効率的なインデックス例分析を確立する

MySQLは効率的なインデックス例分析を確立する

この記事では、例を使用して、MySQL で効率的なインデックスを作成する方法について説明します。ご参考までに、詳細は以下の通りです。

理想的なインデックスを作成するにはどうすればよいでしょうか?

  • クエリ頻度
  • 差別
  • インデックスの長さ
  • フィールドを上書きする

差別

ユーザーが100万人いると仮定すると、性別は基本的に男性が50万人、女性が50万人なので、差別化は低いです。

ショート丈

インデックスの長さは、インデックス ファイルのサイズ、追加、削除、変更の速度に直接影響し、間接的にクエリ速度に影響します (より多くのメモリを占有します)。

高い識別力、短い長さ

質問: 識別度を高くし、長さを短くするとどうなるでしょうか?

回答:列内の値を左から右に切り取ることでインデックスを作成できます。

(1)カットが短いほど、繰り返しが多くなり、差別化が低くなり、インデックス効果が悪くなります。 (2)カットが長いほど、繰り返しが少なくなり、差別化が高くなり、インデックス効果が高くなりますが、影響が大きくなります。追加と削除が遅くなり、クエリ速度に影響します。

したがって、識別と長さの間でバランスを取る必要があります。従来の方法: 異なる長さにカットし、その識別力をテストします。

13,324 件のレコードを含む英語レベル 4 の語彙テーブルがあるとします。名前フィールドにインデックスを追加するにはどうすればよいでしょうか。

這里寫圖片描述

差別をどのように計算しますか?

単語の最初の重複しない数字を抽出します。

dictからcount(distinct left(name,1))を選択します

合計数量:

辞書からcount(*)を選択

区別: 一意の数/合計数、SQL ステートメントは次のようになります。

(select count(distinct left(name,1)) from dict) / (select count(*) from dict) を rate として選択します。

次に、次の手順に従って、他の長さに対応する識別を調べます。このグラフを見ると、長さが 11 の場合、繰り返し率はわずか 1% であることがわかります。11 ビットのインデックスを作成することを検討できます。

這里寫圖片描述

テーブル辞書を変更し、インデックス名 name(11) を追加します。

左接頭辞は区別が難しい

左プレフィックスが判別しにくい列のインデックスを作成するためのヒント

URL列など

http://www.baidu.com
http://www.web-bc.cn

列の最初の 11 文字が同じなので区別が困難です。この問題を解決するには、次の 2 つの方法を使用できます。

(1)列の内容を逆順に保存し、インデックスを作成する

moc.udiab.www//:ptth
nc.cb-bew.www//://ptth

このように左接頭辞は優れた識別力を持つ

(2)疑似ハッシュインデックス効果

urlとurl_hashの両方の列を保存する

#テーブルを作成する create table t10 (
id int 主キー、
url char(60) nullでないデフォルト ''
);
#t10値に挿入
(1,'http://www.baidu.com')、
(2、「http://www.sina.com」)、
(3,'http://www.sohu.com.cn')、
(4,'http://www.onlinedown.net')、
(5、「http://www.gov.cn」);
# テーブル構造を変更し、urlcrc 列を追加します。alter table t10 add urlcrc int unsigned not null;

保存するときは、URLに対応するCRC32コードをデータベースに挿入し、urlcrcフィールドに従ってインデックスを作成します。検索するときは、ビジネスレイヤーで対応するURLをCRC32に変換して検索し、インデックスを使用できます。

crc の結果は 32 ビット int 符号なし数値なので、データが 40 億を超えると重複が発生しますが、それだけの価値はあります。(インデックスの長さは int4 バイトです)

複数列インデックス

複数列インデックスに関する考慮事項 - 列クエリの頻度、列の差別化、実際のビジネスシナリオとの組み合わせ

ecshop を例にとると、goods テーブルの cat_id と brand_id は複数列のインデックスです。差別化の観点から見ると、brand_id の方が差別化が高くなります。ただし、モールの実際のビジネスでは、顧客は一般的に最初に大きなカテゴリ -> 小さなカテゴリ -> ブランドの順に選択し、最終的に 2 つのインデックスを作成することを選択します。

(1) インデックス(cat_id,brand_id)
(2) インデックス(cat_id,shop_price)

(3)インデックス(cat_id、brand_id、shop_price)を追加することもできます。3つの冗長インデックス

しかし、(3)の最初の2つの列は(1)の最初の2つの列と同じなので、(1)を削除して2つのインデックスを作成できます。

index(cat_id,price)およびindex(cat_id,brand_id,shop_price);

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL 重複インデックスと冗長インデックスの例の分析
  • MySQL インデックス カバレッジの例の分析
  • MySQL インデックスがソートに与える影響の分析例
  • MySQL のインデックスにおける NULL の影響についての詳細な説明
  • MySQL インデックスの原理と最適化の詳細な説明
  • ユニークインデックスの S ロックと X ロックによる MySQL デッドロック ルーチンの理解
  • mysql インデックスの追加 mysql インデックスの作成方法
  • MySQL インデックスタイプの概要と使用上のヒントと注意事項
  • MySQL でインデックスを表示、作成、削除する方法
  • MySQL インデックス作成方法、構文構造、および例
  • MySQL クラスター化インデックスのページ分割原理の分析例

<<:  Docker が占有するディスク領域をクリーンアップする方法

>>:  WeChat アプレット計算機の例

推薦する

MySQL でデータの重複挿入を回避する 4 つの方法

最も一般的な方法は、フィールドに主キーまたは一意のインデックスを設定することです。重複データを挿入す...

反応自動構築ルーティングの実装

目次順序1. 集中ルーティング2. ファイルディレクトリ3. CompileRouterを作成する4...

Ubuntu 20.04 IPアドレスを変更する方法の例

例:本日、前回のオフィスコラボレーションプラットフォーム実験の続きをしていたところ、仮想マシンは以前...

VueでEchartsチャートの幅と高さの適応を実現する実践

目次1. インストールとインポート2. 手ぶれ補正機能を定義する3. チャートコードを描くinit ...

ES6分解課題の原理と応用

目次配列分割代入オブジェクトの分解代入分割割り当ての適用変数の値の交換関数から複数の値を返すマップ構...

HTML テーブルの使い方 (Web ページの視覚効果を表示する)

NetEase Blog で HTML を使用する場合、テンプレートに直接コードを追加できることは...

WeChatアプレットは記録機能を実装します

この記事では、WeChatアプレットのレコード機能を実装するための具体的なコードを参考までに紹介しま...

ORM モデル フレームワークを使用して MySQL データベースを操作する方法

ORM とは何ですか? ORM は Object Relational Mapping の略で、オブ...

Dapr を使用してマイクロサービスをゼロから簡素化する例

目次序文1. Dockerをインストールする2. Dapr CLIをインストールする3. Net6 ...

HTML の div、td、p およびその他のコンテナーでの強制改行と非改行の実装

1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...

MySQLでインデックスエラーが発生する状況について簡単に説明します

以下に、トレーニング機関からのヒントと私自身の要約をいくつか示します。以下のインデックスの内容を説明...

Web デザイン: Web ミュージックの実装テクニック

<br />Web ページに音楽を挿入する場合、サフィックスに応じて異なるコードを記述す...

Xshellの一般的な問題と関連する設定の詳細な説明

この記事では、Xshell と関連する構成の一般的な問題について説明します。この記事の構成は、主に ...

ファイル操作のためのLinuxシステムコール

目次1. ファイルを開くパラメータの紹介2. ファイルの読み取り3. ファイルを書き込む4. 閉じる...

テキストの円形スクロールアニメーションを実装するミニプログラム

この記事では、参考までに、テキストループスクロールを実現するアプレットの具体的なコードを例を挙げて紹...