MySQL 优化

由于最近在学习java的原因,所以对数据库稍微研究了一下,感觉这个东西还是很好用的。虽然当数据量大的时候这个东西也很恶心。


首先 我假设你所有的东西都是在数据量很大的的时候  因为我这里要提的是优化


=============================================================

1)当一个数据表非常大的时候 我们怎样构造查询才能得到表中的记录数?


有一个方法,当然是徐慧儿告诉我的  那就是 select count(*) from table


徐汇二啊徐慧  这个方法确实真是不好玩的啊  当数据表很大的时候  在我的应用的时候是要大于2000w的时候  这种方法根本就不行啊 非常慢



所以有一种改进的方法就是设置一个自增的主键  然后  在想要得到表大小的时候这样搞


select max(id) from table


这样就可以很快的得到你想要的总数


=============================================================

2) 当数据表很大的时候我应该怎样遍历数据库才比较好


这时候我们肯定不能一次一下把所有的数据全部load进内存 因为太大  所以我们需要一个翻页的机制 也就是一页一页的拿  然后这样就可以遍历了 


我不知道mysql里面的游标怎么用 因为很多数据库都有游标 比如 berkeleyDB  但是貌似很多现在商业的数据库并不支持游标操作 所以我只能是换一种思路


鬼谷子好像说了一句  用limit 和offset可以很好的得到这些  所以我就也试了他的方法 发现不错


不错的意思是这样可以翻页


但是这样会非常慢 特别是当你的offset非常大的时候 更是十分明显


所以我最后还是找到了一种比较好的翻页的方法 那就是 我有一个自增主键 然后每次都得到这个自增主键的一些东西 举个例子


select * from table where id>4506500 order by id desc limit 205


看到了吧 很巧妙 就是直接把这个id给限制住 让他大于某一个值 然后往后走一点  注意  我们有时候的id不是连续增长的(特别是当我们用了去重之后 ) 

所以这个时候要把上一次最后一个数字 也就是id给记录下来 然后就可以一点一点的往后找了 每次找一百个 用大于号 就行  真妙 嘿嘿


---------------------------------------------------------------------------------------------------------------------------


关于一些数据库要说的话 



还是zangyang的那句话比较好 :尽量少的与数据库进行交流 最好把所有的操作都放在数据库里面 然后就是经常使用的或者要被检索的尽量建一个索引 这样会快一点











留下您的评论

回复列表:

By王炳宁 on April 23, 2016 | 类别 Java

关于本站