mysql 百万数据 查询_[求优化] mysql 百万数据 IN 查询

51

257 天前

```

CREATE TABLE IF NOT EXISTS million_user_info (

id bigint(7) PRIMARY KEY AUTO_INCREMENT,

city_id int,

delete_time TIMESTAMP,

others VARCHAR(111) DEFAULT "" NOT NULL

);

CREATE INDEX idx_city_id ON million_user_info (city_id,id);(无独立 city_id 索引)

```

模拟环境:

125 万条数据;插入的 city_id 在楼主给出的 city_id 范围内,others 为干扰随机 str

查询语句:

```

SELECT * FROM `million_user_info` WHERE ( `city_id` IN (45757,45967,46044,46126,46288,46473,46642,46769,46919,47078,47119,45758,45762,45786,45811,45822,45839,45850,45870,45877,45892,45905) ) AND `million_user_info`.`delete_time` IS NULL ORDER BY `id` DESC LIMIT 1000;

```

测试结果:

当 delete_time=null 的行数实际只有 1 行时,秒查;

当 delete_time=null 的行数实际有 10w 行时,且 SQL 无 limit,耗费 11s ;

当 delete_time=null 的行数实际有 10w 行时,且 SQL 加 limit 1000,秒查;

当 delete_time=null 的行数实际有 10w 行时,且 SQL 包含 force index,无 limit,耗费 15.9s ;

当 delete_time=null 的行数实际有 10w 行时,且 SQL 包含 force index,加 limit 1000,耗费 4.9s ;

加上单独的 city_id 索引后,上述测试结果无明显变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值