ホームページ  >  記事  >  データベース  >  MySql における非常に重要なインデックス操作

MySql における非常に重要なインデックス操作

黄舟
黄舟オリジナル
2017-09-30 10:59:161470ブラウズ

基本に焦点を当てます - 忘れてはいけない MySql インデックス操作

ここでは、MySql インデックスの基本的な知識については書きません。情報のポーターになりたいわけではありません。

ヒントの共有: Workbench は、MySQL 用に特別に設計された ER/データベース モデリング ツールです。データベースの管理に加えて、SQL ステートメントを生成するための強力なツールでもあります。適切に使用すれば、半分の労力で 2 倍の結果が得られます。もちろん、基礎知識を理解していることが前提となります。

まず、インデックス操作のための SQL ステートメントをいくつか整理します。なぜなら、私が問題に遭遇したとき、Baidu で見つけた の返信が基本的に 間違っている だったからです。 を修正しに来てください。

1. 複数の主キー (PRIMARY) の削除

前提シナリオ: テーブルに複数の主キー (PRIMARY) を定義しました。たとえば、id は自動インクリメントする主キーです。 、userCode も主キーとして定義され、userAge も主キーとして定義されます。 1 つの ID のみを保持し、他の 2 つを削除する場合、対応する SQL ステートメントは次のとおりです:

説明: 指定されたテーブルを変更し、PRIMARY KEY を削除し、ID を PRIMARY として追加します。鍵。

ALTER TABLE `表名` 
DROP PRIMARY KEY,ADD PRIMARY KEY (`id`);

2. 通常のインデックスを追加します

警告: table_name を変更せずに実行しないでください。私が言いたいのは、index_name です。インデックスの名前付け (index_field 名など) を合理的に標準化する必要があります。より適切な名前があれば、メッセージを残してください。

それ以外の場合は、エラー: MySQL の重複キー エラー (重複キー名 '') が報告されます。確かに、index_name が変更されていないためです。 Index_name が使用されます。

ALTER  TABLE  `table_name`  ADD  INDEX index_name (`column`)

3. インデックスの使用仕様について

(1) インデックスの使用は、物理的なストレージ領域を占有するだけではありません。ストレージを占有するスペースが不足すると、クエリの速度に逆効果が生じるため、インデックスの定義にはデータベース設計を明確に理解する必要があります。インデックスを構築するためのいくつかの原則

1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录

4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);

5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

(2). インデックスの種類

1. 通常のインデックス

制限のない最も基本的なインデックス 2. ユニークなインデックス

インデックス列の値は一意である必要があります。ただし許可されています null 値があります


3. 主キーインデックス

主キーインデックスは特別な一意のインデックスであり、null 値は許可されません


4. 単一列インデックス

単一の複数列インデックス(結合インデックス) は複数の単一列インデックスより効率的です


5 .左端の接頭辞: 複数列インデックス


以上がMySql における非常に重要なインデックス操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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