MySQL索引
2021/10/3 19:11:09
本文主要是介绍MySQL索引,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 简介
MySQL 支持如下索引:
index
/key
:普通索引;primary key
:(1)值必须唯一,且所有的关键列都必须被定义为not null
,如果用户没有显式地定义,MySQL 会隐私地声明;(2)一张表只能包含一个 primary key;(3)primary key 对应索引的名称为primary
,对于其它类型的索引,如果没有显式地赋予一个名字,则默认为第一个索引列的名称,可能还会添加_2
、_3
等后缀,以保持唯一性;unique
:值必须唯一,但可以为NULL
;fulltext
:(1)用于全文搜索,只有 InnoDB 和 MyISAM 存储引擎支持;(2)只能用于char, varchar, text
数据类型;(3)索引时使用的是该列的全部内容,不支持列前缀,即使用全文,而不是值的前缀;spatial
:只能用于空间类型,只有 InnoDB 和 MyISAM 存储引擎支持;
2. 列前缀
对于字符串类型,创建索引时可以通过 column_name(length)
来指定只使用该列的
[
0
,
l
e
n
g
t
h
)
[0, length)
[0,length) 部分。
对于 blob
和 text
数据类型,则是必须指定列前缀。
对于非二进制字符串类型(char
,varchar
、text
)前缀长度以字符为单位;对于二进制字符串类型(binary
,varbinary
、blob
)前缀长度以字节为单位。
3. 添加索引
在创建索引时,可以通过 using btree
或 using hash
来指定索引类型:
- InnoDB 和 MyISAM 存储引擎支持 BTREE 索引;
- Memory 存储引擎支持 HASH 和 BTREE 索引;
此外,也可以创建多列索引:
{index | unique | fulltext | spatial | primary key} [index_type] (key_part,...) index_type: using {btree| hash} key_part: column_name[(length)] [ASC | DESC]
注:fulltext
和 spatial
索引不能使用 index_type
。
创建表的同时添加索引:
create table `lookup` ( `id` int, `first_name` varchar(20), `second_name` varchar(20), index using btree(`first_name`(10), `second_name`(10)) ) engine=Memory;
创建表之后添加:create [unique | fulltext | spatial] index ...
# 索引名为 first_name MariaDB [mydb]> create index `first_name` using btree on `lookup` (`first_name`(10), `second_name`(10)); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
或者:alter table table_name add {index | unique | fulltext | spatial | primary key} ...
MariaDB [mydb]> alter table `lookup` add index using btree(`first_name`(10), `second_name`(10)); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
4. 查看索引
MariaDB [mydb]> show index from `lookup` \G *************************** 1. row *************************** Table: lookup Non_unique: 1 Key_name: first_name Seq_in_index: 1 Column_name: first_name Collation: A Cardinality: NULL Sub_part: 10 Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: *************************** 2. row *************************** Table: lookup Non_unique: 1 Key_name: first_name Seq_in_index: 2 Column_name: second_name Collation: A Cardinality: NULL Sub_part: 10 Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: 2 rows in set (0.00 sec)
5. 删除索引
MariaDB [mydb]> drop index `first_name` on `lookup`; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
或者:
MariaDB [mydb]> alter table `lookup` drop index `first_name`; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
删除主键时使用:
alter table `table_name` drop primary key;
这篇关于MySQL索引的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程