Is the delete marker also set on old keys on UPDATE? Or just DELETE -> INSERT?
I ran into the ever-growing FTS index issue last year. I’m creating DB diffs which also contain some FTS3/4 tables. The tables get constantly updated for the checksum. The DBs were always vacuum’ed, but the growing FTS index caused the db to grow from 50MB to 150MB+ in my case (and I think the „non-grwon“ FTS tables including indices accounted for about 1/3 of the whole DB size according to the SQLite analyzer). On "server side“ (DBs are created on a server and then deployed to some smartphone apps) the issue was easily resolvable with the optimize command. On client side (smartphone) however each diff still causes the DB to grow - optimize() is there also not possible for the same reasons. Ben Am 02.05.14 11:22 schrieb "Dan Kennedy": >So I'm thinking a solution might be: > > * Fix FTS so that it picks this case - when a merge includes so many > delete markers that the output is small enough to be deemed a >level-N > b-tree, not a level-N+1 b-tree, and > > * Instead of using the default 16-way merges, the app could organize > to periodically invoke the "merge=X,Y" command with a smaller Y >value > (say 2) to limit the maximum size of the index to Y times its >optimal > size (instead of 16 times). > >It is an interesting problem. And the above is just guesswork... It would >be good to verify experimentally that the index really does grow >indefinitely >with this kind of input before trying to "fix" anything. > >Dan. _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users