Информация об изменениях

Сообщение [Mysql] Ускорить запрос от 03.07.2021 17:19

Изменено 09.07.2021 18:00 rosencrantz

(Mysql) Ускорить запрос
База Mysql 8.0.19.

Есть таблица вида:
create table Users(
  orgId varchar(64) not null,
  id varchar(64) not null,
  firstName varchar(64) not null,
  lastName varchar(64) not null,
  primary key (orgId, id)
)


В таблице — 45 млн записей. orgId — 200 уникальных значений. На один orgId приходится 225 тыс записей. Хочется быстро выполнять вот такие 2 запроса:
-- Q1:
select * from Users where orgId = '123' and firstName like 'a%' and lastName like 'b%'

-- Q2:
select * from Users where orgId = '123' and (firstName like 'a%' or lastName like 'a%')


В обоих случаях 'a%' и 'b%' — это ввод пользователя. Пользователь может ввести 'j' ('j%'), а может 'jonathan' ('jonathan%').

Сделал индекс:
create index OrgIdFirstNameLastName on Users(orgId, firstName, lastName)


Индекс применяется для Q1, запрос работает быстро. Для Q2 не применяется, Mysql использует PRIMARY. Q2 сильно медленнее Q1.

Если добавить "use index":
-- Q2_B:
select * from Users use index (OrgIdFirstNameLastName) 
where orgId = '123' and (firstName like 'a%' or lastName like 'a%')


Q2_B всё равно работает медленно.

Как добиться, чтобы Q2 работал быстро?
[Mysql] Ускорить запрос
База Mysql 8.0.19.

Есть таблица вида:
create table Users(
  orgId varchar(64) not null,
  id varchar(64) not null,
  firstName varchar(64) not null,
  lastName varchar(64) not null,
  primary key (orgId, id)
)


В таблице — 45 млн записей. orgId — 200 уникальных значений. На один orgId приходится 225 тыс записей. Хочется быстро выполнять вот такие 2 запроса:
-- Q1:
select * from Users where orgId = '123' and firstName like 'a%' and lastName like 'b%'

-- Q2:
select * from Users where orgId = '123' and (firstName like 'a%' or lastName like 'a%')


В обоих случаях 'a%' и 'b%' — это ввод пользователя. Пользователь может ввести 'j' ('j%'), а может 'jonathan' ('jonathan%').

Сделал индекс:
create index OrgIdFirstNameLastName on Users(orgId, firstName, lastName)


Индекс применяется для Q1, запрос работает быстро. Для Q2 не применяется, Mysql использует PRIMARY. Q2 сильно медленнее Q1.

Если добавить "use index":
-- Q2_B:
select * from Users use index (OrgIdFirstNameLastName) 
where orgId = '123' and (firstName like 'a%' or lastName like 'a%')


Q2_B всё равно работает медленно.

Как добиться, чтобы Q2 работал быстро?