MYSQL中1000万条数据你是怎么查询的,查询非常慢怎么优化

文章讨论了在处理大数据量时SQL查询的优化方法,包括避免全表扫描,减少字段选择以降低网络IO,使用索引尤其是覆盖索引来提升查询速度,以及通过where条件限制数据范围,优化分页查询,特别是对于大偏移量的情况,可以改用id限定方式。此外,还提到了缓存数据以减轻数据库压力的策略。
摘要由CSDN通过智能技术生成
select count(*) from user_login_log;
select * from user_login_log limit 10000,100;
select * from user_login_log limit 10000,1000;
select * from user_login_log limit 10000,10000;
select * from user_login_log limit 10000,100000;
select * from user_login_log limit 10000,1000000;

 数据量越大,花费时间越长

select * from user_login_log limit 100,100;
select * from user_login_log limit 1000,100;
select * from user_login_log limit 10000,100;
select * from user_login_log limit 100000,100;
select * from user_login_log limit 1000000,100;

 

偏移量越大,花费时间越长(浅层分页到深层分页)

SQL优化:

1.MySQL自身

2.网络IO

3.SQL自身

--原SQL

select * from user_login_log limit 10000,100000;

--避免使用select *

select user_id,ip,sttr1,attr2,attr3,attr4,attr5,attr6,attr7,attr8,attr9,attr10 from user_login_log limit 10000,100000;

 全表扫描,查询效率慢

--按需查找字段

select id from user_login_log limit 10000,100000;

explain
select id from user_login_log limit 10000,100000;

 

 使用索引扫描,主键索引,进行提升

select user_id from user_login_log limit 10000,100000;

--覆盖索引

alter table user_login_log add index idx_user_id(user_id);
select user_id from user_login_log limit 10000,100000;

查询字段索引覆盖,通过辅助索引提升查询效率

针对数据量大的情况,我们可以做如下优化:

按需查询字段,减少网络IO消耗

避免使用select *,减少MySQL优化器负担

查询的字段尽量保证索引覆盖

借助nosql缓存数据缓解MySQL数据库的压力

select * from user_login_log limit 1000000,100;

--增加索引where条件,缩减数据范围

select * from user_login_log where id> 1000000 limit 100;

 

偏移量大的场景,我们可以使用数据量大的优化方案,除此之外还可以将偏移量改为使用id限定的方式提升查询效率

针对偏移量大的情况,我们可以做如下优化:

添加where条件缩减条数,然后limit关键再进行数据筛选

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值