MYSQL常见问题


Mysql数据库中一个表里有一千多万条数据,怎么快速的查出第900万条后的100条数据?

select * from table limit 9000000,100;

执行结果用了将近7s,非常慢

分析:

  1. limit语句查询的时间与起始记录的位置成正比
  2. mysql的limit语句很方便,但是对记录很多的表不适合直接使用
  • 对大数据量limit分页性能优化(第一次优化) 思路:使用索引 表test使用id作为自增主键,默认为主键索引,现在使用覆盖索引来查询
    SELECT id FROM test LIMIT 9000000,100;
    

    执行结果4s左右

现在优化的方案有两种,通过id作为查询条件使用子查询实现和使用join实现

  1. id>=的子查询形式实现
    select * from test where id >= (select id from test limit 9000000,1)limit 0,100 
    

    执行结果 4.26s

  2. 使用join形式
    SELECT * FROM test a JOIN (SELECT id FROM test LIMIT 9000000,100) b ON a.id = b.id
    

    执行结果4.25

两者都是一个原理,所以效果差不多。但是建议使用join,尽量减少子查询的使用

百万级别以上数据如何删除

  1. 先删除索引(删除数据的速度和创建索引数量成正比)
  2. 删除其中无用数据
  3. 删除完成后重新创建索引 该过程比直接删除快很多,万一删除终端,一切删除都会回滚就比较麻烦了



Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 2379. Minimum Recolors to Get K Consecutive Black Blocks
  • 2471. Minimum Number of Operations to Sort a Binary Tree by Level
  • 1387. Sort Integers by The Power Value
  • 2090. K Radius Subarray Averages
  • 2545. Sort the Students by Their Kth Score