前端页面需要显示在表单中的格式。

父级名称需要多次显示,表中只存在一个。

上级名称 | 子名称

---- | ------

设计 | 功能设计

设计 | 接口设计

开发 | 功能开发

开发 | 接口开发

有如下初始 sql:

CREATE TABLE task_type

(

id int AUTO_INCREMENT

PRIMARY KEY,

name varchar(255) NOT NULL COMMENT '任务类型名称',

parent_id int NULL COMMENT '父级 id'

);

INSERT INTO task_type (id, name, parent_id)

VALUES (2, '设计', 0);

INSERT INTO task_type (id, name, parent_id)

VALUES (3, '开发', 0);

INSERT INTO task_type (id, name, parent_id)

VALUES (10, '功能设计', 2);

INSERT INTO task_type (id, name, parent_id)

VALUES (11, '接口设计', 2);

INSERT INTO task_type (id, name, parent_id)

VALUES (12, '功能开发', 3);

INSERT INTO task_type (id, name, parent_id)

VALUES (13, '接口开发', 3);

其中 id 是主键,name 和 parent_id 允许重复。

写了一个查询 sql:

SELECT t2.name as "parentName", t1.name As "childName"

FROM task_type t1

JOIN task_type t2 ON t1.parent_id = t2.id

AND t1.parent_id != 0

使用EXPLAIN分析后,发现 t1 表的执行效率为All,全表扫描。

t2 表的执行效率为eq_ref。

发现给 sql 加上联合索引或者普通索引,explain 表的结果,t1 表的执行效率最多为index,type=index,索引物理文件全扫描,速度非常慢,这个 index 级别比较 range 还低,与全表扫描是小巫见大巫。

如何优化 SQL,让其的执行效率可以有所提高呢?

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐