前天去面试,面试官看到我简历上有一句:“百万级数据量3s以下响应时间”.
然后
他问:“你觉得3s是快了还是慢了,你觉得你能忍受的是多少时间?”
我说:“1s一下。”
他看我应届生,要在我面前装B了,哥技术不如人,装就装吧。
我跟他解释:“可能是我的机器速度慢(600mhz)的原因吧。”
然后我问他:“您做过如此“大”数据量的优化么。”
他说:“我的响应时间几十毫秒就可以了。”
我问:“有多少数据?”
他说:“千万级。”
这时,哥彻底被征服了。
不过,哥死爱面子,继续问:“那您用的是什么数据库?”
他说:“我用的是sqlserver,这与用什么数据库有很大的关系么?”
我说:“我的是mysql!你的数据库比我的好。”
他说没关系的!
我又解释:“我点击前边那几页,速度也很快的(30ms一下),只是点击最后几页速度才会变慢的...我发觉即使是百度,点击后半几页,速度也会慢的!”
他说:“百度不会的,百度不会慢的。这与点前边或后半几页有关系么?”
哥哭了:“mysql 中的那个limit 函数就是这样的,越往后就越慢,关键就是那个排序花时间啊。”
自己越说越乱了...然后不解析了。说,可能是我的技术不行吧!现在求解决“mysql 1000万数据量如何做到几十毫秒查询响应”,就像百度、博客那样,关键是点击前边几页跟后边几页的时间要一样,做到几十毫秒的响应时间!数据库不需要设计很复杂,你就设计一张表,一个id主键,一个name字段,一个text字段 就可以了吧。我想看看,高手如何做到1000万数据量 提取后边条天数据 用几十毫秒时间的。

解决方案 »

  1.   

    select * from table1 where id>1000万 order by id limit 50这样就行了,因为根本就不需要一个精确的分页。 哪怕你的分面有偏差,1000万用户根本就无法确定你的误差。
      

  2.   

    如果是连续查询,可以对resultset(cursor)作cache,不用重新生成resultset,只需要对前一次的resultset进行游标移动。结果很快就会出来。
      

  3.   

    在where条件和order by条件上加上联合索引会导致这些字段必然是排序状态  这样得limit必然快