由于最近在学习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的那句话比较好 :尽量少的与数据库进行交流 最好把所有的操作都放在数据库里面 然后就是经常使用的或者要被检索的尽量建一个索引 这样会快一点
回复列表: