MYSQL常见问题
Mysql数据库中一个表里有一千多万条数据,怎么快速的查出第900万条后的100条数据?
select * from table limit 9000000,100;
执行结果用了将近7s,非常慢
分析:
- limit语句查询的时间与起始记录的位置成正比
- mysql的limit语句很方便,但是对记录很多的表不适合直接使用
- 对大数据量limit分页性能优化(第一次优化) 思路:使用索引 表test使用id作为自增主键,默认为主键索引,现在使用覆盖索引来查询
SELECT id FROM test LIMIT 9000000,100;
执行结果4s左右
现在优化的方案有两种,通过id作为查询条件使用子查询实现和使用join实现
- id>=的子查询形式实现
select * from test where id >= (select id from test limit 9000000,1)limit 0,100
执行结果 4.26s
- 使用join形式
SELECT * FROM test a JOIN (SELECT id FROM test LIMIT 9000000,100) b ON a.id = b.id
执行结果4.25
两者都是一个原理,所以效果差不多。但是建议使用join,尽量减少子查询的使用
百万级别以上数据如何删除
- 先删除索引(删除数据的速度和创建索引数量成正比)
- 删除其中无用数据
- 删除完成后重新创建索引 该过程比直接删除快很多,万一删除终端,一切删除都会回滚就比较麻烦了
Enjoy Reading This Article?
Here are some more articles you might like to read next: