MySQL-索引(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MySQL-索引

添加唯一索引

添加索引

1. mysql> alter table book add unique index Uniqldx(bookid);
2. Query OK, 0 rows affected (0.05 sec)
3. Records: 0  Duplicates: 0  Warnings: 0

查看索引

1. mysql> show index from book\G
2. *************************** 1. row ***************************
3.         Table: book
4.    Non_unique: 0
5.      Key_name: Uniqldx
6.  Seq_in_index: 1
7.   Column_name: bookid
8.     Collation: A
9.   Cardinality: 0
10.      Sub_part: NULL
11.        Packed: NULL
12.          Null: 
13.    Index_type: BTREE
14.       Comment: 
15. Index_comment: 
16. *************************** 2. row ***************************
17.         Table: book
18.    Non_unique: 1
19.      Key_name: year_publication
20.  Seq_in_index: 1
21.   Column_name: year_publication
22.     Collation: A
23.   Cardinality: 0
24.      Sub_part: NULL
25.        Packed: NULL
26.          Null: 
27.    Index_type: BTREE
28.       Comment: 
29. Index_comment: 
30. *************************** 3. row ***************************
31.         Table: book
32.    Non_unique: 1
33.      Key_name: BKNameIdx
34.  Seq_in_index: 1
35.   Column_name: bookname
36.     Collation: A
37.   Cardinality: 0
38.      Sub_part: 30
39.        Packed: NULL
40.          Null: 
41.    Index_type: BTREE
42.       Comment: 
43. Index_comment: 
44. 3 rows in set (0.00 sec)

添加单列索引

添加索引

1. mysql> alter table book add index BKidex(comment(50));
2. Query OK, 0 rows affected (0.01 sec)
3. Records: 0  Duplicates: 0  Warnings: 0

查看索引

1. mysql> show index from book\G
2. *************************** 1. row ***************************
3.         Table: book
4.    Non_unique: 0
5.      Key_name: Uniqldx
6.  Seq_in_index: 1
7.   Column_name: bookid
8.     Collation: A
9.   Cardinality: 0
10.      Sub_part: NULL
11.        Packed: NULL
12.          Null: 
13.    Index_type: BTREE
14.       Comment: 
15. Index_comment: 
16. *************************** 2. row ***************************
17.         Table: book
18.    Non_unique: 1
19.      Key_name: year_publication
20.  Seq_in_index: 1
21.   Column_name: year_publication
22.     Collation: A
23.   Cardinality: 0
24.      Sub_part: NULL
25.        Packed: NULL
26.          Null: 
27.    Index_type: BTREE
28.       Comment: 
29. Index_comment: 
30. *************************** 3. row ***************************
31.         Table: book
32.    Non_unique: 1
33.      Key_name: BKNameIdx
34.  Seq_in_index: 1
35.   Column_name: bookname
36.     Collation: A
37.   Cardinality: 0
38.      Sub_part: 30
39.        Packed: NULL
40.          Null: 
41.    Index_type: BTREE
42.       Comment: 
43. Index_comment: 
44. *************************** 4. row ***************************
45.         Table: book
46.    Non_unique: 1
47.      Key_name: BKidex
48.  Seq_in_index: 1
49.   Column_name: comment
50.     Collation: A
51.   Cardinality: 0
52.      Sub_part: 50
53.        Packed: NULL
54.          Null: YES
55.    Index_type: BTREE
56.       Comment: 
57. Index_comment: 
58. 4 rows in set (0.00 sec)

添加全文索引

添加索引

1. mysql> CREATE TABLE t6
2.     ->  (
3.     ->  id INT NOT NULL,
4.     ->  info CHAR(255)
5.     ->  )ENGINE=MyISAM;
6. Query OK, 0 rows affected (0.00 sec)
7. 
8. mysql> ALTER TABLE t6 ADD FULLTEXT INDEX InfoFULIdx(info);
9. Query OK, 0 rows affected (0.00 sec)
10. Records: 0  Duplicates: 0  Warnings: 0

查看全文索引

1. mysql> show index from t6\G
2. *************************** 1. row ***************************
3.         Table: t6
4.    Non_unique: 1
5.      Key_name: InfoFULIdx
6.  Seq_in_index: 1
7.   Column_name: info
8.     Collation: NULL
9.   Cardinality: NULL
10.      Sub_part: NULL
11.        Packed: NULL
12.          Null: YES
13.    Index_type: FULLTEXT
14.       Comment: 
15. Index_comment: 
16. 1 row in set (0.00 sec)

添加组合索引

添加索引

1. mysql>  ALTER TABLE book ADD INDEX BKAUthAndInfoIdx(authors(20),info(50));
2. Query OK, 0 rows affected (0.01 sec)
3. Records: 0  Duplicates: 0  Warnings: 0

查看索引

1. mysql> show index from book\G
2. *************************** 1. row ***************************
3.         Table: book
4.    Non_unique: 0
5.      Key_name: Uniqldx
6.  Seq_in_index: 1
7.   Column_name: bookid
8.     Collation: A
9.   Cardinality: 0
10.      Sub_part: NULL
11.        Packed: NULL
12.          Null: 
13.    Index_type: BTREE
14.       Comment: 
15. Index_comment: 
16. *************************** 2. row ***************************
17.         Table: book
18.    Non_unique: 1
19.      Key_name: year_publication
20.  Seq_in_index: 1
21.   Column_name: year_publication
22.     Collation: A
23.   Cardinality: 0
24.      Sub_part: NULL
25.        Packed: NULL
26.          Null: 
27.    Index_type: BTREE
28.       Comment: 
29. Index_comment: 
30. *************************** 3. row ***************************
31.         Table: book
32.    Non_unique: 1
33.      Key_name: BKNameIdx
34.  Seq_in_index: 1
35.   Column_name: bookname
36.     Collation: A
37.   Cardinality: 0
38.      Sub_part: 30
39.        Packed: NULL
40.          Null: 
41.    Index_type: BTREE
42.       Comment: 
43. Index_comment: 
44. *************************** 4. row ***************************
45.         Table: book
46.    Non_unique: 1
47.      Key_name: BKidex
48.  Seq_in_index: 1
49.   Column_name: comment
50.     Collation: A
51.   Cardinality: 0
52.      Sub_part: 50
53.        Packed: NULL
54.          Null: YES
55.    Index_type: BTREE
56.       Comment: 
57. Index_comment: 
58. *************************** 5. row ***************************
59.         Table: book
60.    Non_unique: 1
61.      Key_name: BKAUthAndInfoIdx
62.  Seq_in_index: 1
63.   Column_name: authors
64.     Collation: A
65.   Cardinality: 0
66.      Sub_part: 20
67.        Packed: NULL
68.          Null: 
69.    Index_type: BTREE
70.       Comment: 
71. Index_comment: 
72. *************************** 6. row ***************************
73.         Table: book
74.    Non_unique: 1
75.      Key_name: BKAUthAndInfoIdx
76.  Seq_in_index: 2
77.   Column_name: info
78.     Collation: A
79.   Cardinality: 0
80.      Sub_part: 50
81.        Packed: NULL
82.          Null: YES
83.    Index_type: BTREE
84.       Comment: 
85. Index_comment: 
86. 6 rows in set (0.00 sec)

添加空间索引

添加索引

1. mysql> CREATE TABLE t7
2.     ->  (
3.     ->  g GEOMETRY NOT NULL
4.     ->  )ENGINE=MyISAM;
5. Query OK, 0 rows affected (0.01 sec)
6. 
7. mysql> ALTER TABLE t7 ADD SPATIAL INDEX SpatIdx(g);
8. Query OK, 0 rows affected (0.01 sec)
9. Records: 0  Duplicates: 0  Warnings: 0

查看索引

1. mysql> show index from t7\G
2. *************************** 1. row ***************************
3.         Table: t7
4.    Non_unique: 1
5.      Key_name: SpatIdx
6.  Seq_in_index: 1
7.   Column_name: g
8.     Collation: A
9.   Cardinality: NULL
10.      Sub_part: 32
11.        Packed: NULL
12.          Null: 
13.    Index_type: SPATIAL
14.       Comment: 
15. Index_comment: 
16. 1 row in set (0.00 sec)

创建索引


创建一个book1表

1. mysql> create table book1 (bookid int not null, bookname varchar(255) not null,
2. -> authors varchar(255) not null, info varchar(255) null, comment varchar(255) null,
3. -> year_publication year not null );
4. Query OK, 0 rows affected (0.01 sec)

普通索引

1. mysql> create index bknameidex on book1(bookname);
2. Query OK, 0 rows affected (0.34 sec)
3. Records: 0 Duplicates: 0 Warnings: 0

单列索引

1. mysql> create index bkcmtidex on book1 (comment(50));
2. Query OK, 0 rows affected (0.00 sec)
3. Records: 0 Duplicates: 0 Warnings: 0

组合索引

1. mysql> create index bkauthandinfoidex on book1(authors(30),info(50));
2. Query OK, 0 rows affected (0.00 sec)
3. Records: 0 Duplicates: 0 Warnings: 0

全文索引

1. mysql> drop table t6;
2. Query OK, 0 rows affected (0.00 sec)
3. mysql> create table t6 ( id int not null, info char(255))engine=myisam;
4. Query OK, 0 rows affected (0.00 sec)
5. mysql> CREATE FULLTEXT INDEX FullIdex ON t6(info);
6. Query OK, 0 rows affected (0.00 sec)
7. Records: 0 Duplicates: 0 Warnings: 0

唯一索引

1. mysql> create unique index uniqidx on book1(bookid);
2. Query OK, 0 rows affected (0.00 sec)
3. Records: 0 Duplicates: 0 Warnings: 0

空间索引

1. mysql> drop table t7;
2. Query OK, 0 rows affected (0.00 sec)
3. mysql> create table t7 ( g geometry not null )engine=myisam;
4. Query OK, 0 rows affected (0.00 sec)
5. mysql> create spatial index spaidx on t7(g);
6. Query OK, 0 rows affected (0.00 sec)
7. 
8. Records: 0 Duplicates: 0 Warnings: 0

删除索引


先查看book表的索引

1. mysql> show create table book\G
2. *************************** 1. row ***************************
3.        Table: book
4. Create Table: CREATE TABLE `book` (
5.   `bookid` int(11) NOT NULL,
6.   `bookname` varchar(255) COLLATE utf8_bin NOT NULL,
7.   `authors` varchar(255) COLLATE utf8_bin NOT NULL,
8.   `info` varchar(255) COLLATE utf8_bin DEFAULT NULL,
9.   `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL,
10.   `year_publication` year(4) NOT NULL,
11.   KEY `year_publication` (`year_publication`),
12.   KEY `bknameidx` (`bookname`(30))
13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
14. 1 row in set (0.00 sec)

使用alter命令删除索引后,再次查看book表已经删除bknameidx索引。

1. mysql> alter table book drop index bknameidx;
2. Query OK, 0 rows affected (0.03 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> show create table book\G
6. *************************** 1. row ***************************
7.        Table: book
8. Create Table: CREATE TABLE `book` (
9.   `bookid` int(11) NOT NULL,
10.   `bookname` varchar(255) COLLATE utf8_bin NOT NULL,
11.   `authors` varchar(255) COLLATE utf8_bin NOT NULL,
12.   `info` varchar(255) COLLATE utf8_bin DEFAULT NULL,
13.   `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL,
14.   `year_publication` year(4) NOT NULL,
15.   KEY `year_publication` (`year_publication`)
16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
17. 1 row in set (0.00 sec)

使用drop index删除

1. mysql> show create table t7\G
2. *************************** 1. row ***************************
3.        Table: t7
4. Create Table: CREATE TABLE `t7` (
5.   `g` geometry NOT NULL,
6.   SPATIAL KEY `spatidx` (`g`)
7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
8. 1 row in set (0.00 sec)
9. 
10. mysql> drop index spatidx on t7;
11. Query OK, 0 rows affected (0.00 sec)
12. Records: 0  Duplicates: 0  Warnings: 0
13. 
14. mysql> show create table t7\G
15. *************************** 1. row ***************************
16.        Table: t7
17. Create Table: CREATE TABLE `t7` (
18.   `g` geometry NOT NULL
19. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
20. 1 row in set (0.00 sec)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
存储 关系型数据库 MySQL
MySQL bit类型增加索引后查询结果不正确案例浅析
【8月更文挑战第17天】在MySQL中,`BIT`类型字段在添加索引后可能出现查询结果异常。表现为查询结果与预期不符,如返回错误记录或遗漏部分数据。原因包括索引使用不当、数据存储及比较问题,以及索引创建时未充分考虑`BIT`特性。解决方法涉及正确运用索引、理解`BIT`的存储和比较机制,以及合理创建索引以覆盖各种查询条件。通过`EXPLAIN`分析执行计划可帮助诊断和优化查询。
|
4天前
|
SQL 存储 关系型数据库
mysql加索引真的会锁表吗?揭秘背后的技术细节与规避策略
【8月更文挑战第16天】在数据库管理中,添加索引能大幅提升查询效率。MySQL执行此操作时的锁定行为常引起关注。文章详细解析MySQL中索引添加时的锁定机制及其原理。不同存储引擎及SQL语句影响锁定策略:MyISAM需全表锁定;InnoDB提供更灵活选项,如使用`ALTER TABLE... LOCK=NONE`可在加索引时允许读写访问,尽管可能延长索引构建时间。自MySQL 5.6起,在线DDL技术可进一步减少锁定时间,通过`ALGORITHM=INPLACE`和`LOCK=NONE`实现近乎无锁的表结构变更。合理配置这些选项有助于最小化对业务的影响并保持数据库高效运行。
16 4
|
4天前
|
SQL JavaScript 关系型数据库
Mysql索引不当引发死锁问题
本文通过真实案例解析了MySQL在高并发环境下出现死锁的问题。数据库表`t_award`包含多个索引,但在执行特定SQL语句时遭遇索引失效,导致更新操作变慢并引发死锁。分析发现,联合索引`(pool_id, identifier, status, is_redeemed)`因`identifier`允许为空值而导致索引部分失效。此外,`pool_id`上的普通索引产生的间隙锁在高并发下加剧了死锁风险。为解决此问题,文中提出了调整索引顺序至`(pool_id, status, is_redeemed, identifier)`等方案来优化索引使用,进而减轻死锁现象。
|
6天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
20天前
|
存储 SQL 关系型数据库
(六)MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面纱!
《索引原理篇》它现在终于来了!但对于索引原理及底层实现,相信大家多多少少都有了解过,毕竟这也是面试过程中出现次数较为频繁的一个技术点。在本文中就来一窥`MySQL`索引底层的神秘面纱!
100 5
|
20天前
|
SQL 存储 关系型数据库
(五)MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!
在本篇中,则重点讲解索引应用相关的方式方法,例如各索引优劣分析、建立索引的原则、使用索引的指南以及索引失效与索引优化等内容。
|
24天前
|
SQL 缓存 关系型数据库
MySQL 查询索引失效及如何进行索引优化
MySQL 查询索引失效及如何进行索引优化
62 1
|
27天前
|
SQL 缓存 关系型数据库
面试题MySQL问题之实现覆盖索引如何解决
面试题MySQL问题之实现覆盖索引如何解决
30 1
|
27天前
|
存储 SQL 索引
面试题MySQL问题之使用SQL语句创建一个索引如何解决
面试题MySQL问题之使用SQL语句创建一个索引如何解决
32 1
|
14天前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
40 0