sqlite 优化 之 ANALYZE 与 VACUUM 命令
- (void)vacuumDB { NSArray *databaseInfos; @synchronized(_databaseInfos) { databaseInfos = _databaseInfos.allValues; } for (GYDatabaseInfo *databaseInfo in databaseInfos) { [databaseInfo.databaseQueue syncInDatabase:^(FMDatabase *db) { if (databaseInfo.timer) { dispatch_suspend(databaseInfo.timer); [db commit]; databaseInfo.needCommitTransaction = NO; } [db executeStatements:@"VACUUM"]; if (databaseInfo.timer) { [db beginTransaction]; dispatch_resume(databaseInfo.timer); } }]; } }
数据分析:
- (void)synchronizeDB:(NSString *)dbName { @synchronized(_databaseInfos) { GYDatabaseInfo *databaseInfo = [_databaseInfos objectForKey:dbName]; [databaseInfo.databaseQueue syncInDatabase:^(FMDatabase *db) { if (databaseInfo.timer) { dispatch_source_cancel(databaseInfo.timer); databaseInfo.timer = nil; [db commit]; } if (databaseInfo.writeCount >= 500) { [db executeStatements:@"ANALYZE"]; databaseInfo.writeCount = 0; } }]; @synchronized(databaseInfo.updatedTables) { [databaseInfo.databaseQueue close]; [databaseInfo.updatedTables removeAllObjects]; }
[self.writeCounts setObject:@(databaseInfo.writeCount) forKey:dbName]; NSData *data = [NSPropertyListSerialization dataWithPropertyList:self.writeCounts format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil]; [data writeToFile:[GYDBRunner pathForAnalyzeStatistics] atomically:YES]; } }
参考 :(1) http://www.cnblogs.com/stephen-liu74/archive/2012/01/14/2322335.html
(2) GYDataCenter (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |