小编Win*_*nks的帖子

MySQL 在大表上索引性能

长话短说: 我对 2 个巨大的表有一个查询。它们不是索引。它很慢。因此,我建立索引。它比较慢。为什么这是有道理的?正确的优化方法是什么?

的背景:

我有2张桌子

  • person,包含人员信息的表 ( id, birthdate)
  • works_inperson,与部门之间的0-N关系;works_in包含id, person_id, department_id.

它们是 InnoDB 表,遗憾的是不能选择切换到 MyISAM,因为数据完整性是一项要求。

这两个表很大,除了各自PRIMARYid.

我正在尝试获取每个部门中最年轻的人的年龄,这是我提出的查询

SELECT MAX(YEAR(person.birthdate)) as max_year, works_in.department as department
    FROM person
    INNER JOIN works_in
        ON works_in.person_id = person.id
    WHERE person.birthdate IS NOT NULL
    GROUP BY works_in.department
Run Code Online (Sandbox Code Playgroud)

该查询有效,但我对性能不满意,因为运行需要大约 17 秒。这是预料之中的,因为数据很大并且需要写入磁盘,并且它们不是表上的索引。

EXPLAIN对于这个查询给出

| id | select_type | table   | type   | possible_keys | key     | key_len | ref                      | rows     | Extra …
Run Code Online (Sandbox Code Playgroud)

mysql sql database indexing performance

6
推荐指数
1
解决办法
7208
查看次数

标签 统计

database ×1

indexing ×1

mysql ×1

performance ×1

sql ×1