使用
REINDEX。
(只REINDEX重建索引结构,它实际上并没有改变任何率的值。)
使用中行的排序作为隐式指数
而不是试图改变一大堆行的索引值,为什么不执行排序顺序的映射?
使用SELECT语句,如:
NSString* query = @"SELECT * FROM myTable ORDER BY id LIMIT 1 OFFSET %d";
query = [NSString stringWithFormat:query, indexPath.row + 1];
删除行做这样的事情:
NSString* query = @"DELETE FROM myTable WHERE ID = (SELECT ID FROM myTable ORDER BY ID LIMIT 1 OFFSET %d)";
query = [NSString stringWithFormat:query, indexPath.row + 1];
插入,定期进行插入像往常一样。
这样,当您删除一行时,最终不需要编辑每一行的ID大于您要删除的行。这会更快。
确保在数据库发生更改时更新您的表视图,以保持表视图与数据库一致。
这也有保持您的表视图排序好的副作用。
定义一个触发器,以改变受影响的索引
如果你真的想保持索引,使他们完美的系列(即:1,2,3,4,...)
您可以像这样定义删除触发器:
CREATE TRIGGER reindex AFTER DELETE ON myTable FOR EACH ROW
BEGIN
UPDATE myTable SET ID = old.ID - 1 WHERE ID > old.ID;
END;
如果我理解正确,您希望在删除后重新排序主键。 – 2009-11-24 17:59:43
是的,你说得对。 :)你知道有这种可能吗? – user134282 2009-11-24 18:05:41