我有一个像以下的mysql表:
create table table (
id bigint auto_increment
s_id varchar(30),
col1 varchar(50),
col2 varchar(50),
col3 varchar(30),
col4 varchar(30),
col5 int,
primary key(id),
index idx_search(col1, col2, col3)
)
该表有超过9000万行数据 . 在上一个查询中,我得到前100名s_id . 现在,我有一个查询来获取s_id的信息:
select s_id, col1, col2, col3, col4, max(col5) from table where col1 = 'XXX' and col2 = 'XXX' and s_id in (?, ?, ?, ...) group by s_id
此查询速度不稳定,范围为100ms至4000ms .
当 col1='full'
和 col2='full'
时,它在MySQL中拥有超过1000万行数据 .
我也尝试添加像 idx_sid(s_id, col1, col2)
这样的索引,这很无奈 .
如何加快此查询?或任何其他解决方案?
1 回答
当它们的顺序从左到右时,sql索引可以工作 . 因为您已创建索引(s_id,col1,col2),所以
WHERE
子句应按照定义的顺序包含这些列 . 使用以下查询肯定会加快您的响应时间 .select s_id, col1, col2, col3, col4 from table where s_id in (?, ?, ?, ...) and col1 = 'XXX' and col2 = 'XXX'