使用FMDB在iOS中查询sqlite中的BLOB数据选择太慢

时间:2013-08-02 20:22:48

标签: ios objective-c sqlite blob fmdb

我正在为我的sqlite数据库使用FMDB包装器,并且在数据库中我存储从url下载的图像,并存储在BLOB数据中,但是当我在数据库中进行SELECT查询时如下:

SELECT id,img FROM table1 WHERE name = "Carl"

这是数据库中的列:

img BLOB

但查询速度非常慢,如果我从查询中删除img,它会非常快,在我从网址下载图像后我调整了它以使其更小,从而以这种方式节省内存空间:

NSData *biggerImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:url_image]];

NSData *img = UIImageJPEGRepresentation([self imageWithImage:[UIImage biggerImg] scaledToSize:CGSizeMake(90, 134)], 1.0);


- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}

任何人都知道如何让查询更快?我需要在查询中还有图像。

感谢

1 个答案:

答案 0 :(得分:1)

如此处所述:http://www.sqlite.org/intern-v-extern-blob.html,它可以改进 如果大型BLOB(如图像数据)存储在外部,并且只有文件路径记录在数据库中,则表示SQLite性能。

如果将图像存储在“Documents”目录中,则将它们备份到iCloud(如果 用户已激活该功能)。如果不需要iCloud备份(例如因为可以随时从服务器重新加载图像),那么“库/缓存”(使用NSCachesDirectory)将是一个更好的位置。