mysql インデックスの設計と使用
インデックスの設計と使用
5.1 MySQL インデックスの概要
すべての MySQL 列タイプにインデックスを付けることができます。関連する列にインデックスを使用することは、SELECT 操作のパフォーマンスを向上させる最善の方法です。ストレージ エンジンに応じて、各テーブルのインデックスの最大数と最大インデックス長を定義します。すべてのストレージ エンジンは、テーブルごとに少なくとも 16 個のインデックスをサポートし、インデックスの合計長は少なくとも 256 バイトです。ほとんどのストレージ エンジンには、より高い制限があります。
MySQL 5.1 では、MyISAM および InnoDB テーブルの場合、プレフィックスの長さは最大 1000 バイトです。プレフィックスの制限はバイト単位で測定する必要があるのに対し、CREATE TABLE ステートメントのプレフィックスの長さは文字数として解釈されることに注意してください。マルチバイト文字セットを使用する列のプレフィックス長を指定するときは、必ずこれを考慮してください。
FULLTEXT インデックスを作成することもできます。インデックスは全文検索に使用できます。 MyISAM ストレージ エンジンのみが FULLTEXT インデックスをサポートし、CHAR、VARCHAR、TEXT 列のみをサポートします。インデックスは常に列全体に対して実行され、部分 (プレフィックス) インデックスはサポートされません。空間列タイプに対してインデックスを作成することもできます。 MyISAM ストレージ エンジンのみが空間タイプをサポートします。空間インデックスは R ツリーを使用します。デフォルトでは、MEMORY (HEAP) ストレージ エンジンはハッシュ インデックスを使用しますが、B ツリー インデックスもサポートされています。
5.2 インデックス設計の原則
1. 検索対象となるインデックス列は、必ずしも選択される列ではありません。つまり、インデックス付けに最も適した列は、SELECT キーワードの後の選択リストに表示される列ではなく、WHERE 句に表示される列、または join 句で指定された列です。
2. 一意のインデックスを使用します。列内の値の分布を考えてみましょう。インデックスは、一意の値を持つ列では最もよく機能しますが、複数の重複値を持つ列では最悪です。たとえば、年齢を保持する列には異なる値があるため、行を簡単に区別できます。
性別の記録に使用される列には「M」と「F」のみが含まれるため、この列のインデックス付けはほとんど役に立ちません (どの値が検索されても、約半分の行が取得されます)
3. 短いインデックスを使用します。文字列にインデックスを付ける場合は、プレフィックスの長さを指定する必要があり、これは可能な限り行う必要があります。
たとえば、CHAR(200) 列がある場合、ほとんどの値が最初の 10 文字または 20 文字内で一意である場合は、列全体にインデックスを付けないでください。最初の 10 文字または 20 文字にインデックスを付けると、インデックス領域を大幅に節約でき、クエリが高速になる可能性があります。インデックスが小さいほどディスク I/O が少なくなり、値が短いほど比較が速くなります。
さらに重要なのは、キー値が短い場合、インデックス キャッシュ内のブロックがより多くのキー値を保持できるため、MySQL もメモリ内により多くの値を保持できることです。これにより、インデックス内の大きなブロックを読み取らずに行を見つける可能性が高まります。
(もちろん、ある程度の常識が適用される必要があります。たとえば、このインデックスには多くの異なる値が存在しないため、列値の最初の文字のみによるインデックス付けはあまり有益ではありません。)
4左端のプレフィックスを使用します。 n 列インデックスを作成すると、実際には MySQL が使用できる n 個のインデックスが作成されます。
インデックスの左端の列セットを行の一致に使用できるため、複数列インデックスは複数のインデックスとして機能できます。このような列のセットは、左端のプレフィックスと呼ばれます。 (これは、列の最初の n 文字をインデックス値として使用する列のプレフィックスのインデックス付けとは異なります。)
5. インデックスを付けすぎないでください。 「インデックスは多ければ多いほど良い」とは考えないでください。何事にもインデックスを使用するのは間違いです。インデックスを追加するたびに追加のディスク領域が占有され、書き込み操作のパフォーマンスが低下します。これについてはすでに紹介しました。テーブルの内容が変更されると、インデックスを更新する必要があり、場合によっては再構築が必要になるため、インデックスの数が増えるほど時間がかかります。めったに使用されない、またはまったく使用されないインデックスがある場合、テーブルの変更が不必要に遅くなります。
さらに、MySQL は実行計画を生成するときに各インデックスを考慮する必要があり、これにも時間がかかります。冗長インデックスを作成すると、クエリ最適化のための作業がさらに増えます。インデックスが多すぎると、MySQL が使用する最適なインデックスを選択できなくなる可能性もあります。必要なインデックスのみを保持すると、クエリの最適化が容易になります。すでにインデックスが作成されているテーブルにインデックスを追加する場合は、追加するインデックスが既存の複数列インデックスの左端のインデックスであるかどうかを考慮する必要があります。その場合、このインデックスはすでに存在するため、わざわざ追加する必要はありません。
6. 列で行う比較の種類を検討します。インデックスは、「 < 」、「 < = 」、「 = 」、「 > = 」、「 >」および BETWEEN 演算で使用できます。パターンにリテラルの接頭辞がある場合、インデックスは LIKE 操作でも使用されます。列が他のタイプの操作 (STRCMP() など) にのみ使用される場合、その列にインデックスを付ける価値はありません。
5.3 btreeインデックスとハッシュインデックス
BTREEインデックスとHASHインデックスでは、=、<=>、IN、IS NULL、IS NOT NULL演算子を使用する場合、キー要素と定数値の比較関係が範囲条件に相当します。 。ハッシュ インデックスにはいくつかの追加機能があります。これらは = または <=> 演算子を使用した等価比較にのみ使用されます (ただし高速です)。 オプティマイザーは、ハッシュ インデックスを使用して ORDER BY 操作を高速化することはできません。
(このタイプのインデックスは、シーケンス内の次のエントリの検索には使用できません)。 MySQL は、2 つの値の間におよそ何行あるかを判断できません (これは、範囲オプティマイザがどのインデックスを使用するかを決定するために使用されます)。 MyISAM テーブルをハッシュ インデックス付き MEMORY テーブルに変更すると、一部のクエリが影響を受けます。行の検索にはキーワード全体のみを使用できます。 (B ツリー インデックスを使用すると、任意のキーの左端のプレフィックスを使用して行を検索できます)。
BTREE インデックスの場合、>、<、>=、<=、BETWEEN、!= または <>、または LIKE 'pattern' ('pattern' はワイルドカードで始まらない) 演算子を使用する場合、キー要素と定数値との比較関係が範囲条件に相当します。
「定数値」とは、クエリ文字列内の定数、同じ結合またはシステム テーブル内の列内の定数、相関関係のないサブクエリの結果、前のタイプの部分式のみで構成される式を指します
以下にいくつか挙げます。 WHERE 句に範囲条件を含むクエリの例:
次の範囲クエリは、Btree インデックスとハッシュ インデックスに適用できます。
SELECT * FROM t1WHEREkey_col = 1ORkey_col IN (15,18,20); 次の範囲クエリは、Btree インデックスに適用できます。
SELECT * FROM t1WHERE key_col > 列に特定の値を持つ行。インデックスを使用しない場合、MySQL はレコード 1 から開始して、関連する行が見つかるまでテーブル全体を読み取る必要があります。テーブルが大きいほど時間がかかります。テーブル内のクエリ対象のカラムにインデックスがある場合、MySQL はすべてのデータを調べることなく、データ ファイルの中央を検索する段階にすぐに到達できます。たとえば、テーブルに 1000 行がある場合、これは順次読み取りより少なくとも 100 倍高速になります。行の大部分にアクセスする必要がある場合は、その時点でディスクのシークが回避されるため、順次読み取りの方がはるかに高速であることに注意してください。
ほとんどの MySQL インデックス (PRIMARY KEY、UNIQUE、INDEX、および FULLTEXT) は B ツリーに保存されます。空間列タイプのインデックスのみが R ツリーを使用し、MEMORY テーブルはハッシュ インデックスもサポートします。
データベースがインデックスを使用する状況とデータベースがインデックスを使用しない状況の詳細な説明については、最適化の章の関連する章を参照してください。ここでは繰り返しません。
さらに関連記事を入手したい場合は、php 中国語 Web サイト (www.php.cn) に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









CrystalDiskMark は、シーケンシャルおよびランダムの読み取り/書き込み速度を迅速に測定する、ハード ドライブ用の小型 HDD ベンチマーク ツールです。次に、編集者が CrystalDiskMark と Crystaldiskmark の使用方法を紹介します。 1. CrystalDiskMark の概要 CrystalDiskMark は、機械式ハード ドライブとソリッド ステート ドライブ (SSD) の読み取りおよび書き込み速度とパフォーマンスを評価するために広く使用されているディスク パフォーマンス テスト ツールです。 ). ランダム I/O パフォーマンス。これは無料の Windows アプリケーションで、使いやすいインターフェイスとハード ドライブのパフォーマンスのさまざまな側面を評価するためのさまざまなテスト モードを提供し、ハードウェアのレビューで広く使用されています。

foobar2000 は、音楽リソースをいつでも聴くことができるソフトウェアです。あらゆる種類の音楽をロスレス音質で提供します。音楽プレーヤーの強化版により、より包括的で快適な音楽体験を得ることができます。その設計コンセプトは、高度なオーディオをコンピュータ上で再生可能 デバイスを携帯電話に移植し、より便利で効率的な音楽再生体験を提供 シンプルでわかりやすく、使いやすいインターフェースデザイン 過度な装飾や煩雑な操作を排除したミニマルなデザインスタイルを採用また、さまざまなスキンとテーマをサポートし、自分の好みに合わせて設定をカスタマイズし、複数のオーディオ形式の再生をサポートする専用の音楽プレーヤーを作成します。過度の音量による聴覚障害を避けるために、自分の聴覚の状態に合わせて調整してください。次は私がお手伝いさせてください

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「NetEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

4月17日のニュースによると、HMDは有名なビールブランドのハイネケンとクリエイティブ企業のボデガと提携して、ユニークな折りたたみ式携帯電話「The Boring Phone」を発売した。この携帯電話は、デザインの革新性だけでなく、機能面でも自然に立ち返り、人々を本当の人間関係に戻し、友人と飲む純粋な時間を楽しむことを目指しています。退屈な携帯電話は、ユニークな透明なフリップデザインを採用し、シンプルでありながらエレガントな美しさを示しています。内部には 2.8 インチ QVGA ディスプレイ、外部には 1.77 インチ ディスプレイが装備されており、ユーザーに基本的な視覚的インタラクション エクスペリエンスを提供します。写真に関しては、3,000万画素のカメラしか搭載されていませんが、日常の簡単な作業には十分です。

4月26日のニュースによると、ZTEの5GポータブルWi-Fi U50Sが正式に販売され、価格は899元からとなっている。外観デザインに関しては、ZTE U50S ポータブル Wi-Fi はシンプルでスタイリッシュで、持ちやすく、梱包しやすいです。サイズは159/73/18mmで持ち運びが簡単で、いつでもどこでも5G高速ネットワークを楽しむことができ、妨げられないモバイルオフィスとエンターテインメント体験を実現します。 ZTE 5G ポータブル Wi-Fi U50S は、最大 1800Mbps のピーク レートの高度な Wi-Fi 6 プロトコルをサポートし、Snapdragon X55 高性能 5G プラットフォームを利用して、ユーザーに非常に高速なネットワーク エクスペリエンスを提供します。 5G デュアルモード SA+NSA ネットワーク環境と Sub-6GHz 周波数帯域をサポートするだけでなく、測定されたネットワーク速度は驚異的な 500Mbps に達することもあり、これは簡単に満足できます。

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

7月12日のニュースによると、Honor Magic V3シリーズは本日正式にリリースされ、新しいHonor Vision Soothing Oasisアイプロテクションスクリーンを搭載しており、スクリーン自体は高スペックで高品質であると同時に、AIアクティブアイプロテクションの導入も先駆けとなっています。テクノロジー。近視を軽減する伝統的な方法は「近視メガネ」であると報告されています。近視メガネの度数は均等に分散され、視野の中心領域は網膜上に結像されますが、周辺領域は網膜の後ろに結像されます。網膜は像が遅れていると認識し、眼軸方向の成長を促進し、その度数が深くなります。現在、近視の進行を軽減する主な方法の 1 つは、「デフォーカス レンズ」です。中央領域は通常の度数で、周辺領域は光学設計の隔壁によって調整され、周辺領域の像が収まります。網膜の前。
