type显示访问类型,较为重要。通过它可以了解我们的SQL语句是否优化过、是否达到最佳的效果。

它的值有很多,从最好到最差比较如下:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

以下几个是常见的(从最好到最差):

system > const > eq_ref > ref > range > index > All

一般而言,我们要保证查询至少达到ranag级别,最好能到达到ref。

分别了解一下几个常见的值的涵义。

system

只有一行记录,这种情况平时一般不会出现,可以忽略。

const

表示通过索引一次就找到了,用于比较主键或唯一键索引。因为只匹配一行数据,所以很快。比如将主键置于where列表中,MySQL就能将该查询转换为一个常量。

如:explain select * from (select * from emp where id = 1)x;

FROM后的子查询,所以select_type为DERIVED,第2行结果的id值较大,所以优先执行。emp表中id是主键,id=1即只匹配一行数据,所以type的值为const。同时,外层查询从临时表x中查询全部,由于x中只有一行数据,所以type值是system。

eq_ref

唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一键索引扫描。type的值是eq_ref的查询中用到了索引,但查询只有一条记录匹配。

用两个表简单测试

test1表:

test2表

有以下SQL:

explain select * from test1 t1 ,test2 t2 where t1.id = t2.id;

看其执行计划

t2的type值是ALL,即全表搜索,t1为eq_ref。两表id字段为主键,t1.id=t2.id条件下只一行数据是符合的。

ref

非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会得到多个符合条件的行,所以它应该属于查找和扫描的混合体。

实例

emp表的数据

在这个表上用job和deptNo字段创建一个复合索引

mysql> create index index1 on emp(job,deptNo);Query OK, 10 rows affected (0.59 sec)

现在要查找deptNo=1的数据(deptNo和job是复合索引,但只使用了一半)

返回了两行,再看一下执行计划:

匹配deptNo=1的值的结果有两行。

现在把索引删除

drop index index1 on emp;

假设emp表的deptNo是test2的id。有以下sql

select * from emp e , test2 t2 where e.deptNo = t2.id;

我们知道结果有两行,其执行计划如下:

emp表的查询type是ref,因为test2表只有一行数据,所有就类似于匹配detpNo的单独的值行。

rang

只搜索给定范围的行。一般就是你在where语句中出现between、、in等查询这种范围扫描,比全表扫描要好,因为它只需要开始于索引的某一个点,而结束另一点,不用扫描全部索引。如以下SQL

select * from emp where id in (1,2);

能够达到rang已经可以了。

index和ALL

index和ALL都是读全表,两者区别在于index类型只遍历索引树,通常比ALL快。

如以下两条SQL:

select id from emp;

select id ,ename from emp;

explain查看如下:

若SQL能达不到rang或以上的话,能达到index也可以。

关于type介绍到此,主要是要了解它的值所代表的涵义,好坏的排列,那我们就可以知道SQL的优劣,以及优化是否有效果。

sql sever 中如何查看某个表的索引_查看执行计划:explain的type相关推荐

  1. 【SQL Sever】将SQL Sever中的一个数据表的数据导出为insert语句

    例如:这SQL   Sever中的一张数据表,想要将这张数据表中的数据  转化成一个一个的insert语句存储在txt的文档中,那么不论走到那里这个insert语句一执行,我们就能将这个数据表中的数据 ...

  2. oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优

    今日客户现场出现一个查询SQL异常慢的情况. 用时分钟级别. SELECT * FROM (SELECT a1.*, rownum rn FROM (SELECT openOrder2017.exch ...

  3. SQL Sever 创建与管理数据表

    目录 一.创建数据表 1.使用SQL Sever Management Studio创建数据表 2.使用CREATE TABLE语句创建数据库 二.管理数据表 1.查看表结构 1.1查看数据表的属性 ...

  4. cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项

    cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...

  5. kettle的连接与使用——从SQL sever中抽取数据至MYSQL

    示例:将SQL sever中test库的student表中的数据抽取至MySQL 如下:MYSQL中student表无数据,且需要获取数据的字段分别为sno.sname.sex.class(我们要将S ...

  6. SQL数据库中如何把一个表中的数据复制到另一个表中?

    SQL数据库中如何把一个表中的数据复制到另一个表中?** 1整个表复制:** insert into table1 select * from table2 2部分列复制:** insert into ...

  7. sql语句中使用函数会耗费性能吗_挽救数据库性能的 30 条黄金法则 | 原力计划...

    作者 | geekguy 责编 | 王晓曼 出品 | CSDN博客 1. 优化查询,应尽量避免全表扫描,应该在用于检索数据和排序数据的字段上建立索引,如where子句用于搜索,order by子句用于 ...

  8. Sql Server之旅——第十一站 简单说说sqlserver的执行计划

    原文:Sql Server之旅--第十一站 简单说说sqlserver的执行计划 我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么 ...

  9. MYSQL查看执行计划 Explain

    1. 概述: 执行计划的查看是进行数据库的sql语句调优时依据的一个重要依据,mysql的执行计划查看相对oracle简便很多,功能也相对简单很多的SQL语句都不能直接查看. 本文档整理了mysql执 ...

最新文章

  1. PCB布线技术 很好很强大
  2. springboot yaml/yml配置文件字符串换行
  3. php导出excel失败原因,PHPExcel导出Excel文件报找不到该文件错误
  4. (转)利用MS AJAX 扩展服务器端控件
  5. python token_Python实现JWT(JSON Web Token)认证
  6. Stanford NLP - 命名实体识别 - NERClassifierCombiner
  7. BS与CS的联系与区别【简】
  8. 栅栏密码怎么写java程序_栅栏密码
  9. 二阶系统响应指标图_一阶系统和二阶系统,了解一下!!!
  10. php 数据库查重,使用SimHash进行海量内容数据查重 - PHP版
  11. 基于JavaWeb的小说阅读网站设计与实现 毕业论文+答辩PPT+项目源码及数据库文件
  12. 分享我本人打造微信公众号吸粉引流的恶搞方法
  13. 深度学习:有监督学习、无监督学习和半监督学习
  14. 请简述计算机主板的基本组成部分,科技知识:计算机主板的基本组成部分
  15. 信捷XD5程序+TG765触摸屏程序,功能为XY双轴排版机,带2个气缸
  16. 几何公差基础知识之平面度
  17. 第46届EC-Final总结
  18. 入门级元宇宙AR avatar制作教程
  19. 逐渐消失的行业-MP3
  20. android系统时间获取方式

热门文章

  1. Oracle删除window服务
  2. Sql Server 日期格式转换
  3. PL/SQL块结构和组成元素
  4. PHP算法对获取用,连接的字符串用in进行sql查询的php处理方法
  5. python列表删除重复项_五分钟学会三种Excel重复项删除方法,工作效率大杀器!...
  6. mysql ef_在EF中使用MySQL的方法及常见问题
  7. PHP中echo与print和print_r
  8. Apache下如何禁止指定目录运行PHP脚本
  9. 多层陶瓷电容器用处_【科普】片状多层陶瓷电容器的封装方法,你了解吗?
  10. stl源码剖析_《STL源码剖析》学习笔记——空间配置器