Сообщение [Mysql] Ускорить запрос от 03.07.2021 17:19
Изменено 03.07.2021 17:21 rosencrantz
(Mysql) Ускорить запрос
База Mysql 8.0.19.
Есть таблица вида:
В таблице — 45 млн записей. orgId — 200 уникальных значений. На один orgId приходится 225 тыс записей. Хочется быстро выполнять вот такие 2 запроса:
В обоих случаях 'a%' и 'b%' — это ввод пользователя. Пользователь может ввести 'j' ('j%'), а может 'jonathan' ('jonathan%').
Сделал индекс:
Q2_B всё равно работает медленно.
Как добиться, чтобы Q2 работал быстро?
Есть таблица вида:
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)
[code]
Индекс применяется для Q1, запрос работает быстро. Для Q2 не применяется, Mysql использует PRIMARY. Q2 сильно медленнее Q1.
Если добавить "use index":
[code]
-- 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.
Есть таблица вида:
В таблице — 45 млн записей. orgId — 200 уникальных значений. На один orgId приходится 225 тыс записей. Хочется быстро выполнять вот такие 2 запроса:
В обоих случаях 'a%' и 'b%' — это ввод пользователя. Пользователь может ввести 'j' ('j%'), а может 'jonathan' ('jonathan%').
Сделал индекс:
Индекс применяется для Q1, запрос работает быстро. Для Q2 не применяется, Mysql использует PRIMARY. Q2 сильно медленнее Q1.
Если добавить "use index":
Q2_B всё равно работает медленно.
Как добиться, чтобы Q2 работал быстро?
Есть таблица вида:
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 работал быстро?