怎么查看一个sql语句是否使用了索引

 我来答
刺友互
高粉答主

2020-01-11 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:72.6万
展开全部

1、首先打开PL/SQL,并进行登录。

2、打开SQL window窗口,输入需要查询的表名。

3、右击表名选择右击菜单中edit选项。

4、点击indexes选项,进入到索引查看tab页面。

5、在这里可以查看到这个表目前已经创建的索引有哪些,可以在这里直接修改,也可以通过sql语句进行修改。

匿名用户
2017-06-19
展开全部
(1).system

这是const联接类型的一个特例。表仅有一行满足条件.
2).const

表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!

3). eq_ref

对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARYKEY。

eq_ref可以用于使用=操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。

(4).ref

对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARYKEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。

ref可以用于使用=或<=>操作符的带索引的列。

(5). ref_or_null

该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。在解决子查询中经常使用该联接类型的优化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
春哥TI
2019-06-25 · 超过24用户采纳过TA的回答
知道答主
回答量:37
采纳率:88%
帮助的人:17万
展开全部

我这里以mysql为例,可视化工具使用的Navicat。

可以在查询的sql前面增加explain命令,以此可以查看到sql的运行状态

explain select * from person where edu ='博士';

下方的控制台主要关注两个栏,type和extra

当extra出现Using filesort和Using temproary这两个时,表示无法使用索引,必须尽快做优化。

当type出现index和all时,表示走的是全表扫描没有走索引,效率低下,这时需要对sql进行调优。

当type出现ref或者index时,表示走的是索引,index是标准不重复的索引,ref表示虽然使用了索引,但是索引列中有重复的值,但是就算有重复值,也只是在重复值的范围内小范围扫描,不造成重大的性能影响。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tc...8@163.com
2017-06-19 · 超过204用户采纳过TA的回答
知道小有建树答主
回答量:396
采纳率:0%
帮助的人:307万
展开全部
跟踪查看SQL语句的"执行计划"就知道了

例如,mysql下可以用这样方式跟踪:

explain SQL语句

oracle里面有多种方法可以跟踪到执行计划的,一时给你也说不清楚,给个链接你自己去看吧:
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式