SQL使用了索引,为什么还是很慢

本文探讨了SQL查询使用索引但仍然可能慢的原因,解释了慢查询与是否使用索引的区别。通过分析MySQL的慢查询日志和索引使用情况,指出扫描行数是影响查询速度的关键因素。文章还讨论了全表扫描、全索引扫描和索引扫描的概念,并举例说明了如何优化索引以减少扫描行数。
摘要由CSDN通过智能技术生成

数据库的查询性能一直是性能优化的重灾区。近期看了丁奇老师的分享“为什么SQL语言使用了索引,但却还是慢查询?”,收获颇丰,以此做个记录

0 准备

创建一张测试表,设置主键索引(id)和普通索引(a) ,如下:

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `a` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

插入两行测试数据

insert into t values(1,1,1),(2,2,2);

1 定义慢查询

我们来看一下官网对慢查询的定义

The slow query log consists of SQL statements that take more than long_query_time seconds to execute and require at least min_examined_row_limit rows to be examined.

mysql的慢查询与语句的执行时间有关,mysql会将语句的执行时间与系统设置的long_query_time这个参数做对比,如果执行时间time > long_query_time并且扫描的行数超过min_examined_row_limit, 则会被认为是慢查询,并将该语句到慢查询日志中。

查看mysql的long_time_time设置

mysql > show variables like 'long_query_time%';

## 如下所示,慢查询设置的时间为10秒
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

查看慢查询日志的地址

mysql > show variables  like '%slow_query_log%';

## slow_query_log 表示慢查询日志是否开启
## slow_query_log_file 表示慢查询日志的地址
+---------------------+-------------------------------------------------+
| Variable_name       | Value                                           |
+---------------------+-------------------------------------------------+
| slow_query_log      | OFF                                             |
| slow_query_log_file | /usr/local/mysql/data/ali-186
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值