mysql优化级别range和ref_Mysql 如何优化 SQL 让其 SQL 性能至少要达到 range 级别
前端页面需要显示在表单中的格式。父级名称需要多次显示,表中只存在一个。上级名称 | 子名称---- | ------设计 | 功能设计设计 | 接口设计开发 | 功能开发开发 | 接口开发有如下初始 sql:CREATE TABLE task_type(idint AUTO_INCREMENTPRIMARY KEY,namevarchar(255) NOT NULL C...
前端页面需要显示在表单中的格式。
父级名称需要多次显示,表中只存在一个。
上级名称 | 子名称
---- | ------
设计 | 功能设计
设计 | 接口设计
开发 | 功能开发
开发 | 接口开发
有如下初始 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,让其的执行效率可以有所提高呢?
更多推荐
所有评论(0)