当我操作非索引列时,为什么查询仍然如此之快?

问题描述 投票:0回答:1

我正在学习数据库的索引。

这是表格的索引。这张表有330k的记录。

mysql> show index from employee;
+----------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table    | Non_unique | Key_name    | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+----------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| employee |          0 | PRIMARY     |            1 | id            | A         |      297383 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| employee |          0 | ak_employee |            1 | personal_code | A         |      297383 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| employee |          1 | idx_email   |            1 | email         | A         |      297383 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+----------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

如您所见,此表上只有三个索引。

现在我想查询birth_date列的哪个位置,我认为它会非常慢,因为birth-date列上没有索引,当我尝试查询时,我发现它非常快。

mysql> select sql_no_cache *
    -> from employee
    -> where birth_date > '1955-11-11'
    -> limit 100
    -> ;

100 rows in set, 1 warning (0.04 sec)

所以我很困惑:

  • 为什么没有索引仍然如此之快?
  • 由于它仍然很快,为什么我们仍然需要索引?
sql indexing limit
1个回答
2
投票

这是您的查询:

select sql_no_cache *
from employee
where birth_date > '1955-11-11'
limit 100

没有索引,因此查询开始从数据页读取数据。在每条记录上,它比较birthdate并返回该行。当它找到100(由于limit)它停止。

据推测,它很快找到了100行。毕竟,美国的中位年龄大约是38岁 - 这是(正如我所写的)1981年的出生年份。到目前为止,大多数人出生于1955年之后。

如果您有order bygroup by,查询会慢得多。这将需要在返回任何内容之前读取所有数据。

© www.soinside.com 2019 - 2024. All rights reserved.