基本に焦点を当てます - 忘れてはいけない 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. 主キーインデックス
4. 単一列インデックス
5 .左端の接頭辞: 複数列インデックス
以上がMySql における非常に重要なインデックス操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。