MySQL Study之--Index的强制使用和忽略

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

1、查看表结构

mysql> show create table emp\G

*************************** 1. row ***************************

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Table: emp
Create Table: CREATE TABLE `emp` (
   `empno`  int ( 4 ) NOT NULL DEFAULT  '0' ,
   `ENAME` varchar( 10 ) DEFAULT NULL,
   `JOB` varchar( 9 ) DEFAULT NULL,
   `MGR`  int ( 4 ) DEFAULT NULL,
   `HIRE` date DEFAULT NULL,
   `SAL`  int ( 7 ) DEFAULT NULL,
   `COMM`  int ( 7 ) DEFAULT NULL,
   `deptno`  int ( 2 ) DEFAULT NULL,
   PRIMARY KEY (`empno`),
   KEY `deptno` (`deptno`),
   CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`deptno`) REFERENCES `dept` (`deptNO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1  row in set ( 0.00  sec)

---在此表中empno 为主键,在deptno上建有索引

mysql> select * from emp;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+-------+--------+-----------+------+------------+------+------+--------+
| empno | ENAME  | JOB       | MGR  | HIRE       | SAL  | COMM | deptno |
+-------+--------+-----------+------+------------+------+------+--------+
|   7369  | SMITH  | CLERK     |  7902  1980 -12 -17  |   800  | NULL |      20  |
|   7499  | ALLEN  | SALESMAN  |  7698  1981 -02 -20  1600  |   300  |      30  |
|   7521  | WARD   | SALESMAN  |  7698  1981 -02 -22  1250  |   500  |      30  |
|   7566  | JONES  | MANAGER   |  7839  1981 -04 -02  2975  | NULL |      20  |
|   7654  | MARTIN | SALESMAN  |  7698  1981 -09 -28  1250  1400  |      30  |
|   7698  | BLAKE  | MANAGER   |  7839  1981 -05 -01  2850  | NULL |      30  |
|   7782  | CLARK  | MANAGER   |  7839  1981 -06 -09  2450  | NULL |      10  |
|   7788  | SCOTT  | ANALYST   |  7566  1987 -07 -13  3000  | NULL |      10  |
|   7839  | KING   | PRESIDENT | NULL |  1981 -11 -17  5000  | NULL |      10  |
|   7844  | TURNER | SALESMAN  |  7698  1981 -09 -08  1500  |     0  |      30  |
|   7876  | ADAMS  | CLERK     |  7788  1987 -06 -13  1100  | NULL |      20  |
|   7900  | JAMES  | CLERK     |  7698  1981 -12 -03  |   950  | NULL |      30  |
|   7902  | FORD   | ANALYST   |  7566  1981 -12 -03  3000  | NULL |      20  |
|   7934  | MILLER | CLERK     |  7782  1982 -01 -23  1300  | NULL |      10  |
+-------+--------+-----------+------+------------+------+------+--------+
14  rows  in  set ( 0.00  sec)

1)全表扫描查询

mysql> explain select * from emp \G

*************************** 1. row ***************************

1
2
3
4
5
6
7
8
9
10
11
   id:  1
   select_type: SIMPLE
         table: emp
          type: ALL
possible_keys: NULL
           key: NULL
       key_len: NULL
           ref: NULL
          rows:  14
         Extra: NULL
1  row  in  set ( 0.00  sec)

2、通过主键查询

mysql> explain select * from emp where empno=7788\G

*************************** 1. row ***************************

1
2
3
4
5
6
7
8
9
10
11
         id:  1
   select_type: SIMPLE
         table: emp
          type: const
possible_keys: PRIMARY
           key: PRIMARY
       key_len:  4
           ref: const
          rows:  1
         Extra: NULL
1  row  in  set ( 0.02  sec)

3)忽略主键索引

mysql> explain select * from emp ignore index(pri) where empno=7788\G

*************************** 1. row ***************************

1
2
3
4
5
6
7
8
9
10
11
       id:  1
   select_type: SIMPLE
         table: emp
          type: ALL
possible_keys: NULL
           key: NULL
       key_len: NULL
           ref: NULL
          rows:  14
         Extra: Using  where
1  row  in  set ( 0.00  sec)

4)强制使用主键

mysql> explain select * from emp force index(pri) where empno=7788\G

*************************** 1. row ***************************

1
2
3
4
5
6
7
8
9
10
11
   id:  1
   select_type: SIMPLE
         table: emp
          type: const
possible_keys: PRIMARY
           key: PRIMARY
       key_len:  4
           ref: const
          rows:  1
         Extra: NULL
1  row  in  set ( 0.00  sec)

5)通过索引deptno查询

mysql> explain select * from emp where deptno=10\G

*************************** 1. row ***************************     

1
2
3
4
5
6
7
8
9
10
11
id:  1
   select_type: SIMPLE
         table: emp
          type: ref
possible_keys: deptno
           key: deptno
       key_len:  5
           ref: const
          rows:  4
         Extra: NULL
1  row  in  set ( 0.00  sec)

6)忽略索引的使用

mysql> explain select * from emp ignore index(deptno) where deptno=10\G

*************************** 1. row ***************************   

1
2
3
4
5
6
7
8
9
10
11
   id:  1
   select_type: SIMPLE
         table: emp
          type: ALL
possible_keys: NULL
           key: NULL
       key_len: NULL
           ref: NULL
          rows:  14
         Extra: Using where
1  row in set ( 0.00  sec)

7)强制使用索引

mysql> explain select * from emp  force index (deptno) where deptno=10\G

*************************** 1. row ***************************

1
2
3
4
5
6
7
8
9
10
11
   id:  1
   select_type: SIMPLE
         table: emp
          type: ref
possible_keys: deptno
           key: deptno
       key_len:  5
           ref: const
          rows:  4
         Extra: NULL
1  row  in  set ( 0.00  sec)









本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/1726065,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
关系型数据库 MySQL 测试技术
MySQL 报错 ERROR 1709: Index column size too large
MySQL 报错 ERROR 1709: Index column size too large
230 4
|
6月前
|
缓存 关系型数据库 MySQL
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
101 3
|
7月前
|
存储 关系型数据库 MySQL
MySQL的优化利器⭐️Multi Range Read与Covering Index是如何优化回表的?
本文以小白的视角使用通俗易懂的流程图深入浅出分析Multi Range Read与Covering Index是如何优化回表
|
7月前
|
SQL 关系型数据库 MySQL
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
mysql查询语句的访问方法const、ref、ref_or_null、range、index、all
|
7月前
|
关系型数据库 MySQL 索引
mysql中force index强制索引
mysql中force index强制索引
68 0
|
存储 SQL 缓存
一文带你了解MySQL之Adaptive Hash Index
在InnoDB体系架构图的内存结构中,还有一块区域名为:Adaptive Hash Index,翻译成中文:自适应哈希索引,缩写:AHI,它是一个纯内存结构,我们今天就来了解它。
1534 0
|
7月前
|
关系型数据库 MySQL
mysql 5.5.62版本建表语句报错: Index column size too large. The maximum column size is 767 bytes
mysql 5.5.62版本建表语句报错: Index column size too large. The maximum column size is 767 bytes
252 0
|
7月前
|
关系型数据库 MySQL
MySQL【问题 02】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
MySQL【问题 02】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
235 0
|
关系型数据库 MySQL 数据库
Mysql中key与index区别
Mysql中key与index区别
|
存储 SQL 关系型数据库
MySQL 优化 index merge(索引合并)引起的死锁分析(强烈推荐)
生产环境出现死锁流水,通过查看死锁日志,看到造成死锁的是两条一样的update语句(只有where条件中的值不同),如下: