MySQL 百万级数据量分页查询方法及其优化( 三 )


答案是: NO 为什么突破不了100万是因为不会设计mysql造成的 。下面介绍非分表法 , 来个疯狂的测试!一张表搞定100万记录 , 并且10G 数据库 , 如何快速分页!
好了 , 我们的测试又回到 collect表 , 开始测试结论是:
30万数据 , 用分表法可行 , 超过30万他的速度会慢道你无法忍受!当然如果用分表+我这种方法 , 那是绝对完美的 。但是用了我这种方法后 , 不用分表也可以完美解决!
答案就是:复合索引! 有一次设计mysql索引的时候 , 无意中发现索引名字可以任取 , 可以选择几个字段进来 , 这有什么用呢?
开始的

  •  
select id from collect order by id limit 90000,10; 这么快就是因为走了索引 , 可是如果加了where 就不走索引了 。抱着试试看的想法加了 search(vtype,id) 这样的索引 。
然后测试
  •  
select id from collect where vtype=1 limit 90000,10; 非常快!0.04秒完成!
再测试:
  •  
select id ,title from collect where vtype=1 limit 90000,10; 非常遗憾 , 8-9秒 , 没走search索引!
再测试:search(id,vtype) , 还是select id 这个语句 , 也非常遗憾 , 0.5秒 。
综上:如果对于有where 条件 , 又想走索引用limit的 , 必须设计一个索引 , 将where 放第一位 , limit用到的主键放第2位 , 而且只能select 主键!
完美解决了分页问题了 。可以快速返回id就有希望优化limit  ,  按这样的逻辑 , 百万级的limit 应该在0.0x秒就可以分完 。看来mysql 语句的优化和索引时非常重要的!
来源:http://sina.lt/gauW

【MySQL 百万级数据量分页查询方法及其优化】


推荐阅读