Подзапрос Предложение ORDER BY с группировкой по? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь получить последние x записей из дочерней сущности (сначала по порядку), где, например, del = 0, но либо запрос медленный с обходными путями, либо упорядочение игнорируется.

Пример данных :

create table child (
id int unsigned not null auto_increment primary key,
name varchar(20) not null default '',
parent_id int unsigned not null,
category_id tinyint unsigned not null,
del tinyint(1) unsigned not null default 0,
index idx_parent(parent_id)
);

create table parent (
id int unsigned not null auto_increment primary key,
name varchar(20) not null default ''
);

create table category (
id tinyint unsigned not null auto_increment primary key,
name varchar(20) not null default ''
);

insert into category (name) values ('A'), ('B'), ('C');
insert into parent (name) values ('Father'), ('Mother'), ('Grand-Father'), ('Grand-Mother');
insert into child(name, parent_id, category_id) values
('Kid', 1, 2), ('Infant', 3, 1), ('Teen', 2, 3), ('Boy', 1, 1),('Girl', 3, 2);

Запрос:

select * from (
    select * from child
    # workaround 1 (slowing down the query)
    # group by id
    order by id desc
) ch
inner join parent p on p.id = ch.parent_id
inner join category c on c.id = ch.category_id
where ch.del = 0
# workaround 2 (slowing down the query)
# order by ch.id desc
limit 10

Смотрите ссылку db-fiddle .

Не используйте del = 0 в подзапросе, потому что он не индексируется, и лучше сначала упорядочить его по первичному индексу, а затем выполнить фильтрацию, поскольку значение 99,9% del = 0 будет равно true.

...