设为首页 收藏本站
查看: 267|回复: 0

[经验分享] MySQL Study之--Index的强制使用和忽略

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-21 09:52:06 | 显示全部楼层 |阅读模式

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

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)



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-154135-1-1.html 上篇帖子: mysql集群管理维护日记 下篇帖子: Mysql 备份与恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表