当前位置: > 财经>正文

MySQL如何查看SQL查询是否用到了索引? 保险金信托是什么东西呀怎么查看是否到账

2023-08-21 06:23:24 互联网 未知 财经

MySQL如何查看SQL查询是否用到了索引?

1. 概述

索引 是提高MySQL查询性能的非常有用的一个工具,当我们对数据库中的某些字段建立了索引,那么怎么查看在执行的SQL查询的过程中是否用到了这些索引呢?

查询SQL语句的执行情况通常通过关键字 explain 来进行.

2. 实践 2.1 建表

例如,如下的数据表

use test;drop table if exists `student`;create table `student`( `id` int not null auto_increment, `name` varchar(50) not null, `number` varchar(20) not null, `address` varchar(100), `age` int default 0, primary key (`id`))Engine=InnoDB DEFAULT CHARSET=utf8;insert into student (`name`, `number`, `address`, `age`)values("马云", "18000001", "浙江省杭州市余杭区", 55),("马化腾", "18000002", "广东省深圳市南山区", 50),("张一鸣", "18000003", "北京市海淀区", 38),("王兴", "18000004", "北京市朝阳区", 40),("李彦宏", "18000005", "北京市海淀区", 45),("程维", "18000006", "北京市海淀区", 42),("雷军", "18000007", "北京市朝阳区", 54),("刘备", "18000008", "四川省成都市青羊区", 60),("诸葛亮", "18000009", "四川省成都市武侯区", 43),("关羽", "18000010", "湖北省荆州市荆州区", 58),("张飞", "18000011", "四川省阆中市", 56),("曹操", "18000012", "河南省洛阳市老城区", 63),("孙权", "18000013", "江苏省南京市建邺区", 49),("李世民", "18000014", "陕西省西安市长安区", 38),("李隆基", "18000015", "陕西省西安市长安区", 28),("朱元璋", "18000016", "江苏省南京市玄武区", 61),("朱棣", "18000017", "北京市东城区", 39); 2.2 对比加索引前后的SQL查询情况

explain 关键字查看SQL查询过程的情况:

SQL查询 address 为北京市的人:

explain select name, address from student where address like "北京市%";

在 student 表上加索引:

alter table student add index (address(9));

为了加快索引,我们采用前缀索引,因为一个汉字在UTF-8编码下占3个字节,因此选择对address字段的前9位加索引。

再次执行上面的SQL查询语句:

2.3 解释Explain得到的结果 1) type 反应查询语句的性能

我们主需要注意一个最重要的的 type 的信息很明显地体现出是否用到了索引:

type 结果值从好到坏依次是:

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

一般来说,得保证查询至少达到 range 级别,最好能达到 ref 级别,否则就可能出现性能问题。

2) possible_keys: SQL查询时用到的索引。

可以看到,没加索引时,possible_keys 的值为 NULL,加了索引后的值为 address,即用到了索引address(索引默认为(column_list)中的第一个列的名字).

3) key 显示SQL实际决定查询结果使用的键(索引)。如果没有使用索引,值为NULL

可以看到,没加索引时,key 的值为 NULL,加了索引后的值为 address,即决定查询结果用到了索引address

4) rows 显示MySQL认为它执行查询时必须检查的行数

可以看到,没加索引时,rows 的值为17,即数据表student中所有数据,说明没加索引时的SQL查询是全表扫描;

加了索引后,rows 的值为6,数据库表中address以“北京市”开头的一共也就6条,SQL在执行查询操作时,一共也检查了6行,不必进行全表扫描查询,可以很容易得出结论:加索引的SQL查询性能远高于不加索引的情况。

3. 总结

通过在SQL查询语句前面添加关键字 explain 就可以分析SQL查询语句的性能了.

参考文献

[1] mysql 如何查看sql查询是否用到索引.

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。