MySQL クイック検索インデックス

MySQLのクイックチェック

日々の仕事や勉強の中で、mysql のステートメント、キーワード、操作などを忘れることがよくあるため、最近少し時間をとって mysql に関する次の内容を書きました。辞書のようなものです


mysql パスワードのリセット
データ型
演算子共通
関数
データの整合性
データベースの基本操作
テーブル自体の操作
テーブル内のデータの操作
サブクエリ
複数テーブル接続
この記事の
内容
SQL ステートメントの前処理
カスタム関数とストアド プロシージャ
MySQL でのプログラミング


導入

インデックスは、データベース テーブル内の 1 つ以上の列の値を並べ替え、データベース テーブル内の特定の情報にすばやくアクセスできるようにする構造です。特定の従業員を姓で検索する場合、インデックスを使用すると、テーブル内のすべての行を検索するよりも早く情報を取得できます。
インデックスの主な目的の 1 つは、テーブル内のデータの取得を高速化することです。つまり、情報検索者が制限された条件を満たすレコード ID をできるだけ早く見つけるのに役立つ補助データ構造です。
たとえば、次のクエリ: select * from table1 where id=10000。インデックスがない場合は、ID が 10000 の行が見つかるまでテーブル全体を走査する必要があります。インデックスを作成した後 (ID 列に確立されたインデックスである必要があります)、インデックス内を検索できます。インデックスは特定のアルゴリズムによって最適化されているため、検索回数は大幅に少なくなります。位置決めにインデックスが使用されていることがわかります。
出典:百度百科事典

インデックスは、テーブル上に大量のデータと多くのクエリがあり、更新がほとんどないテーブルにのみ作成する必要があります。インデックスは、並べ替え、グループ化、結合操作が頻繁に必要となるテーブルに構築する必要があります。
コンテンツを頻繁に更新 (挿入、更新、削除) する必要があるテーブルの場合は、インデックスの使用を避けてください。繰り返しレコードが多数あるテーブルでは、インデックスを作成しないでください。

インデックスの作成

インデックスの作成インデックスの作成

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
    [USING {
   
   BTREE | HASH}]
    ON 表名 (列名 [(长度)] [ASC | DESC],...)

unique:唯一索引,指定unique索引的列的值必须是唯一的,允许空值。如果是组合索引则组合必须唯一。
fulltext:全文索引,制定fulltext索引的列支持值的全文查找,允许重复值和空值。
spatial:空间索引,对数据类型是MySQL支持的4种空间数据类型geometrypointlinestringpolygon的字段建立的索引。
普通索引:不指定上面的关键字的索引(只写create index)。是mysql中的基本索引,允许重复值和空值。
主键索引:使用关键字primary key的列会生成主键索引,不允许空值和重复值。

索引名:为创建的索引取的名字

using {
   
   btree | hash}:使用的索引类型,不写默认是btree

列名[(长度)]:指定对那个列(字段)生成索引;后面可选的长度是指定使用该字段中值前n(长度)个字符当作索引,不写则使用字段值的全部字符。
一般来说,指定长度是为了让生成的索引文件占用空间更小。
指定长度的话会比使用全字符的索引速度慢一些。
如果列中前n(长度)个字符是不同的,则这种指定长度的索引比使用全部字符的索引速度不会差别太大。

[asc | desc]:升序还是降序


# 举例
# 给user表的name字段创建一个普通索引
create index name_index on user (name);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

テーブルを変更してインデックスを作成する

alter table 表名
add [unique | ...] index [索引名](列名[(长度)] [{
   
   asc | desc}],...);

# 为commodity表中的name字段创建一个降序的普通索引
alter table commodity
add index (name(10) desc);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

テーブル作成時にインデックスを指定する

# 创建一个test_table表,并为id字段创建主键索引,
# 为tel字段创建唯一索引
# 为height,weight字段创建组合普通索引
create table test_table(
id int,
name char(10),
tel char(11),
height int,
weight int,
primary key (id),
unique index (tel),
index (height,weight)
);
Query OK, 0 rows affected (0.02 sec)

インデックスを見る

show index from 表名;

# 查看表test_table的索引
show index from test_table;
表名			  是否不是唯一值  索引名      索引中的序列号   列(字段)名 列在索引中的存储方式  索引在唯一    。。。。                      索引类型  。。。。
																A:升序 NULL:无分类  值的数据的
																					估值
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table      | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| test_table |          0 | PRIMARY  |            1 | id          | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| test_table |          0 | tel      |            1 | tel         | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| test_table |          1 | height   |            1 | height      | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| test_table |          1 | height   |            2 | weight      | A         |           0 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
4 rows in set (0.00 sec)

インデックスの削除

# 方法一
drop index 索引名 on 表名;

# 方法二
alter table 表名 drop index 索引名;

もっと

インデックスを作成する

おすすめ

転載: blog.csdn.net/weixin_45345384/article/details/117134271