ホームページ  >  記事  >  データベース  >  MySQL学習メモ(4)データベースインデックスについての話

MySQL学習メモ(4)データベースインデックスについての話

黄舟
黄舟オリジナル
2016-12-21 16:43:50983ブラウズ

少し気分が良くない(分割線に直接ジャンプできます)

今日は気分が良くなりました。解決できなかった強い悪い感情は、夜に複雑な論理的問題を解決した後、徐々に消えていきました。

今日お昼にご飯を食べに行ったとき、クン兄さんが何気なくこう言いました。 .'

他に何を聞いたらいいですか?クン兄さんは私をちらりと見て、忙しすぎて恋をする時間がなかったと何気なく言い続けました。

そんなに頑張らなくても大丈夫かな?住宅価格は年々上昇しており、生活費は日々上昇しています。自分の価値を高めるために頑張らないと、得られるお金が経済成長率を超えてしまいます。それでは私たちは社会の底辺で敗者となり、青春の良き日々を苦しみながら生き続けるしかありません。

一生懸命働くだけでは十分ではありません、十分に働くことによってのみ、他の人との競争で少し有利になることができます。

一生懸命働くのはとても苦痛ですし、人生もとても単調です。こんな生活を望む女の子は誰ですか?

この半年で私の心の知能指数と対人スキルが低下したのは、私が全身全霊をかけてプログラミングに打ち込んだことが関係していると思います。

本当はこの言葉を使ってクン兄さんとおしゃべりしたかったのですが、結局言葉が喉に引っかかって言えませんでした。

誰もが自分の進むべき道を持っていて、孤独であろうと活発であろうと、それは彼の選択です。

道を選ぶとき、多くのものを捨てなければなりません。

私は喜んでそれを手に入れるので、私はそれを失うことをさらに喜んでいます。

暴言の後にテキストが始まります:

インデックスは何ですか?専門用語に騙されやすい学生は、書籍や資料を検索するためのツールである Baidu で人気のある説明を率先して読む必要があります。書籍や雑誌の内容や項目を分類・抽出し、ページ数を示し、一定の順序に並べて、読者の便宜のために書籍に添付したり、分冊したりすること。以前は一般検査または準備検査と呼ばれていました。鉛とも呼ばれます。

「MySQL コア テクノロジーとベスト プラクティス」の章は素晴らしいので、今日の内容のほとんどはこの本の内容の要約です。

索引をより簡単に理解する: 索引は、新華辞典の前にあるピンインと部首で単語を検索する部分です。

人生において、珍しい単語の発音がわからず、ストロークを使わずに検索する場合、これを機械にやらせると、それを見つけるのは難しいかもしれません。辞書全体のすべての単語を検索し、一致した後に戻ります。これにより、テーブル全体がスキャンされることになり、非常に非効率的になります。

しかし、部首を通して検索し、次にストロークを通して検索する場合、検索できるデータの量は非常に少なく、機械に任せて関連するデータ項目をスキャンするだけなので非常に高速です。

したがって、クエリ速度はデータのサイズと絶対的な関係はありません。クエリ速度は、必要なデータの取得とスキャンされるテーブル データの数に依存します。それらの比率が小さいほど、効率は高くなります。

いくつかの重要な知識ポイント:

1. MySQL はテーブル内のデータを取得するとき、まずインデックス「キーワード」の値に従ってインデックスを検索します。開始ページではない場合、テーブル全体がスキャンされます。

「Forget Him」Liu Xijunの曲を聴きながら、次の内容を要約し始めました。

2. インデックスは実際にはデータベース テーブル内のフィールド値のコピーであり、変更されたフィールドはインデックスのキーと呼ばれます。

3. データテーブルは複数のインデックスを作成できます。

4. 接頭語索引とは:

新華社辞書の「部首索引」の使い方。まず調べたい単語の部首を確認し、部首外の単語の画数を見て該当する単語を探します。データベース テーブルの場合も同様に、インデックス内のキーワードの値をインデックスの「キーワード」の一部にすることができます。たとえば、名前テーブルのプレフィックス インデックスを作成できます。ユーザーテーブルの名前に含まれる Zhang の姓を数えます。

データベースの場合、インデックスはフィールドの組み合わせになります。データベース テーブルは複数のキーワードで構成されます。このインデックスは複合インデックスと呼ばれます。インデックスがフィールドであるか、複数のフィールドの組み合わせであるかに関係なく、Bianche キーワードの値はテーブル内の対応するフィールド値のコピーである必要があります。テーブル全体にインデックスを作成することはできません。

7. インデックス データには追加のストレージ領域が必要ですか?

たとえば、牛に草を食べさせたくない場合、この質問はナンセンスです。データベース テーブルのインデックスの場合、インデックス キーは外部ストレージに保存されます。InnoDB ストレージ エンジンの場合、インデックスは外部ストレージの MYI インデックス ファイルに保存されます。データは、MyISAM テーブルのインデックスであっても、データ取得効率を向上させるために、外部ストレージの InnoDB テーブル (共有テーブル スペース ファイルまたは排他的テーブル スペース ファイル) に保存されます。 InnoDB のインデックス、インデックスのキーワードは昇順でソートされ、外部ストレージに配置されます。

8. テーブルのインデックスとして選択するのに適したフィールドは何ですか?クラスター化インデックス

MyISAM テーブルの場合、MySQL はテーブル内のすべてのレコードの主キー値のバックアップと各レコードの開始ページに自動的にインデックスを付けます。部首検索テーブルと同様に「インデックステーブル」を生成し、外部メモリに保存します。このインデックスを主キーと呼びます。 MyISAM テーブルの MYI インデックス ファイルと MYD データ ファイルは 2 つのファイルにあります。 MYI インデックス ファイルの「テーブル レコード ポインタ」を通じて、MYD データ ファイルのテーブル レコードが配置されている物理アドレスを見つけることができます。

Innodb テーブルの「プライマリ インデックス」は、MyISAM テーブルのプライマリ インデックスとは異なります。 InnoDB テーブルの主インデックス キーの順序は、InnoDB テーブルに記録されている主キー値の順序と一致します。この種のインデックスは「クラスター化インデックス」と呼ばれ、各テーブルにはクラスター化インデックスが 1 つだけ設定できます。

9. インデックスとデータ構造の関係は何ですか?

データベース内のすべてのキーワードをインデックス ファイルに保存するルールは非常に複雑です。データベース検索の効率を効果的に向上させるため。インデックスは通常、バランス ツリー (btree) やハッシュ テーブルなどの複雑なデータ構造を使用して「編成」されます。データベースを操作するとき、その根底ではこのような複雑な操作が行われているのですが、それを感じることはできません。

10. インデックスは多ければ多いほど良いのでしょうか?

インデックスが多すぎる場合、データを更新(追加、変更、削除)するときに、テーブル内のデータを変更するだけでなく、テーブルのフィールド値の一貫性を維持するためにテーブルのすべてのインデックスも維持する必要があります。インデックスキーの値の一貫性。逆にデータ更新速度が遅くなります。

テーブル名を練習します。テーブル レコードの変更操作が特に頻繁に行われる場合、インデックスが多すぎるとハードディスク I/O の数が大幅に増加し、サーバーのパフォーマンスが大幅に低下します。ダウンタイムが発生する可能性もあります。

11. インデックスキーワードを選択するための原則。

原則 1. テーブル内のフィールドの分散が高いほど、そのフィールドはインデックス作成に選択されるキーワードとしてより適しています。

データベース ユーザーが主キー制約を作成すると、MySQL は自動的にプライマリ インデックス (プライマリ インデックス) を作成します。一意制約を作成する場合、MySQL はデフォルトで一意制約 (一意インデックス) を自動的に作成します。 , インデックス名は、一意バインディング制約のフィールド名です。

原則 2. 占有容量が少ないフィールドは、インデックス作成のキーワードとして選択するのに適しています。

原則 3. 固定の記憶域を持つフィールドは、インデックス作成のキーワードとして選択するのに適しています。

原則 4: where 句で頻繁に使用されるフィールドにはインデックスを作成する必要があり、グループ化フィールドまたは並べ替えフィールドにはインデックスを作成する必要があり、2 つのテーブルの接続フィールドにはインデックスを作成する必要があります。

昨夜は眠れませんでした。このスペースを閲覧しているときに、友人が離婚することを知りました。彼女は私が大学時代に好きだった女の子で、彼女のわがままなどの理由で短期間仲良くなりましたが、その後別れました。私は結婚して1年しか経っていませんし、子供もいます。急に心が痛くなり、昔に戻りたいと妄想してしまいます。星が空を満たしたあの夜、私は頑固でわがままで、彼女は温かくて香りがよかった。忘れてください。このようなことについて悲しまないほうがいいのです。誰もが死ぬ運命にあります。ちゃんとコード書いたほうがいいよ。

インデックスの導入の目的は検索の効率を向上させることであるため、インデックスのキーワードの選択は select ステートメントと密接に関係しています。この文には 2 つの意味があります。select ステートメントの設計はインデックスの設計を決定します。また、インデックスの設計は select の設計にも影響します。 select ステートメントの where 句、group by 句、および order by 句もインデックスの設計に影響を与える可能性があります。 2 つのテーブルのリンク フィールドに対してインデックスを作成する必要があります。外部キー制約が作成されると、MySQL は外部キーに対応するインデックスを自動的に作成します。これは、外部キー フィールドが通常 2 つのテーブルの接続フィールドであるためです。

原則 5. 頻繁に更新されるフィールドはインデックスの作成には適しておらず、where 句に現れないフィールドはインデックスを作成すべきではありません。

原則6. 一番左のプレフィックスの原則。

複合インデックスにはもう 1 つの利点があり、これは「左端の接頭辞」と呼ばれる概念に反映されており、テーブルの複数のフィールド (名前: 名、姓、住所など) に対して複合インデックス (インデックス) を作成するとします。 )。 where クエリの条件が次のフィールドの組み合わせである場合、mysql は fname_lastname_address インデックスを使用します。 fname_lastname_address インデックスは、他の場合には使用されません。

firstname,lastname,address

firstname,;lastname

firstname

原則 7. プレフィックスインデックスを使用するようにしてください。

名前の姓の部分にのみインデックスを作成します。これにより、インデックスの保存スペースが節約され、検索効率が向上します。

インデックスの設計もデータベースの設計と同様、データベース開発者の経験と知恵の蓄積が必要であると同時に、システムのそれぞれの特性を踏まえて、より良いインデックスを設計する必要があります。 「検索効率を上げる」と「更新速度を下げる」を両立させます。これにより、データベース全体のパフォーマンスが大幅に向上します。

インデックスと制約の関係:

mysql のインデックスと制約の関係は何ですか。制約は、主キー制約、一意制約、デフォルト値制約、チェック制約、非 null 制約、および外部キー制約に分類されます。それらの中で、主キー制約、一意制約、外部キー制約、およびインデックスはより密接に関連しています。

制約は主に、ビジネス ロジックがデータベースを操作するときにデータベースの整合性を確保するために使用されます。

インデックスは、データ検索パフォーマンスを向上させるために、キーワード データを特定のデータ構造 (btree、バイナリ ツリー、ハッシュなど) で外部メモリに保存します。

制約は論理レベルの概念ですが、インデックスは論理的な概念であるだけでなく、物理的な保存方法でもあり、制約が存在するには一定量の保存スペースが必要です。 E Unqiue Index Index の唯一のインデックス

Index Index General Index

Index Complex_index (PRICE, PUBLISH_TIME) Composite Index

この記事の内容のほとんどは、「MySQL Core Technology and Best Practice」から抜粋されていますので、興味のある方は購入してください。この本を読んでみたら、本当によく書かれています。

上記は、データベースのインデックス作成に関する Mysql 学習メモ (4) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。