FMDB - 提高FMResultSet速度

时间:2014-02-19 21:50:03

标签: ios objective-c nsmutablearray fmdb

此代码需要很长时间才能运行。我有大约100,000条记录。 每个步骤大致采用相同的时间....从FMResultSet获取结果并将其读入3个数组。我尝试使用两个select语句。一个得到结果计数,然后在mutableArray中分配该数量。没有性能差异。有什么建议可以提高速度吗?

FMResultSet *results = [database executeQuery:@"SELECT FriendlyName, Serial, Barcode FROM Inventory, Company WHERE Inventory.friendlyName <> '' AND Company.CompanyID = Inventory.companyID AND Company.CompanyName = ?", selectedCompany];

arrayFriendlyName =[[NSMutableArray alloc]init];
arraySerial = [[NSMutableArray alloc]init];
arrayBarcode = [[NSMutableArray alloc]init];


while([results next]) {

    [arrayFriendlyName addObject:[results stringForColumn:@"FriendlyName"]];
    [arrayBarcode addObject:[results stringForColumn:@"Barcode"]];
    [arraySerial addObject:[results stringForColumn:@"Serial"]];

}

[database close];

1 个答案:

答案 0 :(得分:0)

根据您的数据库结构,当涉及到数千行时,围绕sqlite的任何面向对象的包装器都会非常慢。您可以尝试通过直接访问sqlite数据库来加快速度,而无需使用任何面向对象的包装器。由于您不需要任何关系(至少在您的示例代码中),您不会丢失任何相关功能 - 并且它将尽可能快。

与往常一样,Ray Wenderlich是一个很好的资源:http://www.raywenderlich.com/913/sqlite-tutorial-for-ios-making-our-app

如果您还没有这样做,您还可以查看是否在查询中设置了索引 - 因为您要加入两个表,在连接列上没有索引会严重影响您的性能。