这个查询正在获取我想要的正确数据,但这在我们的服务器上是如此缓慢和沉重,只有5417行数据。我将如何在查询构建器或yii2框架方式中优化此查询?
SELECT t1.id
FROM tbl_ticket t1
WHERE NOT EXISTS
( SELECT 1
FROM tbl_ticket
WHERE parent_id = t1.id
)
AND parent_id =0
UNION ALL
SELECT MAX( id )
FROM tbl_ticket
WHERE parent_id <>0
GROUP BY parent_id
ORDER BY id ASC
答案 0 :(得分:0)
( SELECT t1.id
FROM tbl_ticket t1
LEFT JOIN tbl_ticket t2 ON t2.parent_id = t1.id
WHERE t2.id IS NULL
AND t1.parent_id = 0 )
UNION ALL
( SELECT MAX( id )
FROM tbl_ticket
WHERE parent_id <> 0
GROUP BY parent_id )
ORDER BY id ASC
第一个SELECT
似乎找到了没有孩子而没有父母的ids。正确的吗?
第二个SELECT
似乎找到了每个家庭的最后一个兄弟,不包括亚当和夏娃。那是你的意图吗?
我添加了括号,将ORDER BY
从第二个SELECT
移到整个查询。那是你的意图吗?
要快速运行该查询&#39;,您需要
INDEX(parent_id, id)
我假设您已经拥有PRIMARY KEY(id)
。 (请提供SHOW CREATE TABLE tbl_ticket
。)
答案 1 :(得分:0)
这是表格:
CREATE TABLE IF NOT NOT EXISTS tbl_ticket
(
id
int(9)NOT NULL AUTO_INCREMENT,
parent_id
int(11)NOT NULL,
ticket_title
varchar(250)NOT NULL,
location_id
varchar(250)CHARACTER SET latin1 NOT NULL,
status
int(11)NOT NULL,
remarks
varchar(250)CHARACTER SET latin1 NOT NULL,
r_date
datetime NOT NULL,
d_date
datetime NOT NULL,
hd_user_username
varchar(250)CHARACTER SET latin1 NOT NULL,
hd_user_email
varchar(250)CHARACTER SET latin1 NOT NULL,
description
varchar(3000)NOT NULL,
attachment
varchar(250)NOT NULL,
created_by
varchar(250)NOT NULL,
updated_by
varchar(250)NOT NULL,
room_no
varchar(250)NOT NULL,
gsm
varchar(250)NOT NULL,
file_mime_type
varchar(250)NOT NULL,
file_original_name
varchar(250)DEFAULT NULL,
file_size
varchar(250)DEFAULT NULL,
file_extension
varchar(250)DEFAULT NULL,
acknowledged
varchar(250)DEFAULT NULL,
ip_address
varchar(20)DEFAULT NULL,
hostname
varchar(255)DEFAULT NULL,
useragent
文字,
closing_remark
varchar(2048)DEFAULT NULL,
rating
int(6)DEFAULT NULL,
is_student
int(2)DEFAULT NULL,
installation
int(1)DEFAULT NULL,
type
int(1)DEFAULT NULL,
PRIMARY KEY(id
),
KEY id
(id
),
KEY parent_id
(parent_id
)
)ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 5428;