阅读:7747回复:10
将places.sqlite的减肥进行到底,还firefox一个苗条的身材!!!
Firefox把访问每一个网站的历史数据登记在个人Profile目录下的 places.sqlite 文件中。随着访问的网站越来越多,places.sqlite 记录的数据也会越来越多,根据程度不同,这个文件的大小也因人而异,有的人几M大,有的人几十M,有的人甚至几百M大。
places.sqlite记录数据是不分青红皂白的,经常访问的、不经常访问的,重要的、不重要的、一箩筐通通都记录下来,所以有时候会增长得特别胖。而Firefox经常要访问到places.sqlite里面的数据,若places.sqlite太胖,必然拖垮firefox各方面的速度,所以很有必要删除places.sqlite里面一些“不重要”的信息,还firefox一个苗条的身材,让firefox跑得更轻松。。。 --将浏览次数小于等于2次的记录删除: DELETE FROM moz_historyvisits WHERE place_id IN (SELECT id FROM moz_places WHERE visit_count <=2 ); DELETE FROM moz_places WHERE (visit_count <=2 AND hidden <> 1 AND id NOT IN (SELECT place_id FROM moz_annos UNION SELECT fk FROM moz_bookmarks)); --删除最近30天没有访问的网站纪录 delete from moz_places where id in ( select place_id from ( select place_id,max(visit_date) as mdate from moz_historyvisits group by place_id ) as c where c.mdate < strftime('%s',datetime('now','-30 days'))*1000000 ); --经过上面的操作,数据库表有些外键对应不到另外表的主键,所以删除对应不到的记录,也就是整理数据库,让各表的数据关系恢复正常。 DELETE FROM moz_inputhistory WHERE place_id NOT IN (SELECT id FROM moz_places); DELETE FROM moz_favicons WHERE id NOT IN (SELECT favicon_id FROM moz_places); delete from moz_historyvisits where place_id not in (select id from moz_places) ; update moz_places set visit_count=(select count(*) from moz_historyvisits where moz_historyvisits.place_id = moz_places.id); --压缩数据库 VACUUM; 上面的脚本是从网上集合而来,再经整理而成的,至少可以让places.sqlite大小变成原来的1/5。 本人对SQL很熟悉,但不了解places.sqlite这个数据库的设计思想,请教一下各位: 1、怎么编写脚本将30天之前的所有历史记录删除掉,不删除书签。 2、places.sqlite这个数据库里面表的各个字段的含义,以及表与表,属性与属性之间的关系是怎样的???哪里有相关的资料介绍。。。 |
|
1楼#
发布于:2009-09-04 00:16
places的有关资料可以到MDC去看看:
https://developer.mozilla.org/en/Places |
|
|
2楼#
发布于:2009-09-04 00:16
最近冒出来那么多清理sql的扩展,看看源代码估计能知一二。
|
|
|
3楼#
发布于:2009-09-04 00:16
|
|
4楼#
发布于:2009-09-04 00:16
VacuumPlaces Extension 有毛病吧!
|
|
5楼#
发布于:2009-09-04 00:16
moz_places 表中的hidden字段和type字段分别指的是什么???
|
|
6楼#
发布于:2009-09-04 00:16
>用它来压缩places.sqlite之后,places.sqlite整个数据库结构都变了,以后再也不能用SQLite Manager
估计是用了什么不兼容的压缩/优化方式?好在Firefox能打开就行。这对我来说无所谓,我要的只是快,而这样压缩了,确实是快。书签嘛,全部有Xmarks管着 你可以试试另一个改进版Vacuum Places Improved 1 ,它的下载量远远大过Vacuum Places https://addons.mozilla.org/en-US/firefox/addon/13878 |
|
|
7楼#
发布于:2009-09-04 00:16
通过查看源代码知道:Vacuum Places Improved 1 和Vacuum Places Extension最本质的原理都一样,只对places.sqlite执行了一条SQL语句,那就是:vacuum。。。如此简单而已。。。。
反而PlacesCleaner不仅执行了vacuum,还多了一条将浏览次数少于N的记录删除。所以综合看来,PlacesCleaner功能相对多一点,但是事实确恰恰相反,功能最好的下载量反而最少,功能最弱的下载量却最大。。。。不知道为什么会是这样!!! |
|
8楼#
发布于:2009-09-04 00:16
这是Improved 1的作者在Vaccum那里的留言,说明他改进了哪些。
I've taken inspiration from you add-on and worked out the rougher edges, rewriting it in object-oriented code, adding support for localization, auto-cleaning and icon auto-hiding. JavaScript也有面向对象? |
|
|
9楼#
发布于:2009-09-04 00:16
|
|
10楼#
发布于:2009-09-04 00:16
Components.classes["@mozilla.org/browser/nav-history-service;1"]
.getService(Components.interfaces.nsPIPlacesDatabase) .DBConnection.executeSimpleSQL("VACUUM"); 说到底,Vacuum Places Improved 1 和Vacuum Places Extension,都只执行了这一条语句对数据库进碎片压缩。 |
|