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

如题所述

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

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

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  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值的行。在解决子查询中经常使用该联接类型的优化。
第2个回答  2019-06-25

我这里以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表示虽然使用了索引,但是索引列中有重复的值,但是就算有重复值,也只是在重复值的范围内小范围扫描,不造成重大的性能影响。

第3个回答  2017-06-19
跟踪查看SQL语句的"执行计划"就知道了

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

explain SQL语句

oracle里面有多种方法可以跟踪到执行计划的,一时给你也说不清楚,给个链接你自己去看吧:本回答被提问者采纳
相似回答