sql sever 中如何查看某个表的索引_查看执行计划:explain的type
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;
![](/assets/blank.gif)
FROM后的子查询,所以select_type为DERIVED,第2行结果的id值较大,所以优先执行。emp表中id是主键,id=1即只匹配一行数据,所以type的值为const。同时,外层查询从临时表x中查询全部,由于x中只有一行数据,所以type值是system。
eq_ref
唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一键索引扫描。type的值是eq_ref的查询中用到了索引,但查询只有一条记录匹配。
用两个表简单测试
test1表:
![](/assets/blank.gif)
test2表
![](/assets/blank.gif)
有以下SQL:
explain select * from test1 t1 ,test2 t2 where t1.id = t2.id;
看其执行计划
![](/assets/blank.gif)
t2的type值是ALL,即全表搜索,t1为eq_ref。两表id字段为主键,t1.id=t2.id条件下只一行数据是符合的。
ref
非唯一性索引扫描,返回匹配某个单独值的所有行。本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会得到多个符合条件的行,所以它应该属于查找和扫描的混合体。
实例
emp表的数据
![](/assets/blank.gif)
在这个表上用job和deptNo字段创建一个复合索引
mysql> create index index1 on emp(job,deptNo);Query OK, 10 rows affected (0.59 sec)
现在要查找deptNo=1的数据(deptNo和job是复合索引,但只使用了一半)
![](/assets/blank.gif)
返回了两行,再看一下执行计划:
![](/assets/blank.gif)
匹配deptNo=1的值的结果有两行。
现在把索引删除
drop index index1 on emp;
假设emp表的deptNo是test2的id。有以下sql
select * from emp e , test2 t2 where e.deptNo = t2.id;
我们知道结果有两行,其执行计划如下:
![](/assets/blank.gif)
emp表的查询type是ref,因为test2表只有一行数据,所有就类似于匹配detpNo的单独的值行。
rang
只搜索给定范围的行。一般就是你在where语句中出现between、、in等查询这种范围扫描,比全表扫描要好,因为它只需要开始于索引的某一个点,而结束另一点,不用扫描全部索引。如以下SQL
select * from emp where id in (1,2);
![](/assets/blank.gif)
能够达到rang已经可以了。
index和ALL
index和ALL都是读全表,两者区别在于index类型只遍历索引树,通常比ALL快。
如以下两条SQL:
select id from emp;
select id ,ename from emp;
explain查看如下:
![](/assets/blank.gif)
若SQL能达不到rang或以上的话,能达到index也可以。
关于type介绍到此,主要是要了解它的值所代表的涵义,好坏的排列,那我们就可以知道SQL的优劣,以及优化是否有效果。
sql sever 中如何查看某个表的索引_查看执行计划:explain的type相关推荐
- 【SQL Sever】将SQL Sever中的一个数据表的数据导出为insert语句
例如:这SQL Sever中的一张数据表,想要将这张数据表中的数据 转化成一个一个的insert语句存储在txt的文档中,那么不论走到那里这个insert语句一执行,我们就能将这个数据表中的数据 ...
- oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优
今日客户现场出现一个查询SQL异常慢的情况. 用时分钟级别. SELECT * FROM (SELECT a1.*, rownum rn FROM (SELECT openOrder2017.exch ...
- SQL Sever 创建与管理数据表
目录 一.创建数据表 1.使用SQL Sever Management Studio创建数据表 2.使用CREATE TABLE语句创建数据库 二.管理数据表 1.查看表结构 1.1查看数据表的属性 ...
- cte公用表表达式_CTE SQL删除; 在SQL Server中删除具有公用表表达式的数据时的注意事项
cte公用表表达式 In this article, the latest in our series on Common table expressions, we'll review CTE SQ ...
- kettle的连接与使用——从SQL sever中抽取数据至MYSQL
示例:将SQL sever中test库的student表中的数据抽取至MySQL 如下:MYSQL中student表无数据,且需要获取数据的字段分别为sno.sname.sex.class(我们要将S ...
- SQL数据库中如何把一个表中的数据复制到另一个表中?
SQL数据库中如何把一个表中的数据复制到另一个表中?** 1整个表复制:** insert into table1 select * from table2 2部分列复制:** insert into ...
- sql语句中使用函数会耗费性能吗_挽救数据库性能的 30 条黄金法则 | 原力计划...
作者 | geekguy 责编 | 王晓曼 出品 | CSDN博客 1. 优化查询,应尽量避免全表扫描,应该在用于检索数据和排序数据的字段上建立索引,如where子句用于搜索,order by子句用于 ...
- Sql Server之旅——第十一站 简单说说sqlserver的执行计划
原文:Sql Server之旅--第十一站 简单说说sqlserver的执行计划 我们知道sql在底层的执行给我们上层人员开了一个窗口,那就是执行计划,有了执行计划之后,我们就清楚了那些烂sql是怎么 ...
- MYSQL查看执行计划 Explain
1. 概述: 执行计划的查看是进行数据库的sql语句调优时依据的一个重要依据,mysql的执行计划查看相对oracle简便很多,功能也相对简单很多的SQL语句都不能直接查看. 本文档整理了mysql执 ...
最新文章
- PCB布线技术 很好很强大
- springboot yaml/yml配置文件字符串换行
- php导出excel失败原因,PHPExcel导出Excel文件报找不到该文件错误
- (转)利用MS AJAX 扩展服务器端控件
- python token_Python实现JWT(JSON Web Token)认证
- Stanford NLP - 命名实体识别 - NERClassifierCombiner
- BS与CS的联系与区别【简】
- 栅栏密码怎么写java程序_栅栏密码
- 二阶系统响应指标图_一阶系统和二阶系统,了解一下!!!
- php 数据库查重,使用SimHash进行海量内容数据查重 - PHP版
- 基于JavaWeb的小说阅读网站设计与实现 毕业论文+答辩PPT+项目源码及数据库文件
- 分享我本人打造微信公众号吸粉引流的恶搞方法
- 深度学习:有监督学习、无监督学习和半监督学习
- 请简述计算机主板的基本组成部分,科技知识:计算机主板的基本组成部分
- 信捷XD5程序+TG765触摸屏程序,功能为XY双轴排版机,带2个气缸
- 几何公差基础知识之平面度
- 第46届EC-Final总结
- 入门级元宇宙AR avatar制作教程
- 逐渐消失的行业-MP3
- android系统时间获取方式
热门文章
- Oracle删除window服务
- Sql Server 日期格式转换
- PL/SQL块结构和组成元素
- PHP算法对获取用,连接的字符串用in进行sql查询的php处理方法
- python列表删除重复项_五分钟学会三种Excel重复项删除方法,工作效率大杀器!...
- mysql ef_在EF中使用MySQL的方法及常见问题
- PHP中echo与print和print_r
- Apache下如何禁止指定目录运行PHP脚本
- 多层陶瓷电容器用处_【科普】片状多层陶瓷电容器的封装方法,你了解吗?
- stl源码剖析_《STL源码剖析》学习笔记——空间配置器