Also is there an index on the table B.ID field? --- On Mon, 6/15/09, Mike Borland <mike.borl...@cygnetscada.com> wrote:
> From: Mike Borland <mike.borl...@cygnetscada.com> > Subject: Re: [sqlite] sqlite3_step performance degredation > To: "General Discussion of SQLite Database" <sqlite-users@sqlite.org> > Date: Monday, June 15, 2009, 4:11 PM > Nuno, unfortunately your psychic > skills are a bit off on this one. Sorry I wasn't more > explicit. I am not using any LIMIT or OFFSET to do any > virtual scrolling. Basically I have table A which has > 900 rows. Table B has 180,000 rows (900 * 200) which > has a foreign key relationship back to table A. So for > each row in table A, there are 200 rows in table B. My > query is basically a "SELECT * FROM Table B WHERE ID = > TableA.ID". I'm executing this query 900 times, once > for each row in table A. > > When I start the 900 read iterations (always in the same > order), the first one generally reads in about 50ms and by > the last read, it's taking roughly 1000ms. Sometimes > it slows down immediately, sometimes after the 100th > iteration. The only absolutely reproducible aspect is > that it always slows down eventually and once it slows down, > it never speeds back up. I don't believe it's a > locking issue since my timer doesn't start until the query > is successfully executed. > > Any ideas? Would the occasional write operation in > the midst of these reads cause any permanent slow down to > the read time? Thanks. > > Mike Borland > > -----Original Message----- > From: Nuno Lucas [mailto:ntlu...@gmail.com] > > Sent: Friday, June 12, 2009 7:16 PM > To: General Discussion of SQLite Database > Subject: Re: [sqlite] sqlite3_step performance degredation > > On Sat, Jun 13, 2009 at 1:52 AM, Mike > Borland<mike.borl...@cygnetscada.com> > wrote: > > I have a fairly complex program where I am seeing a > performance > > degradation of the sqlite3_step() function. > Basically I'm iterating > > roughly 200 rows at a time, over and over. The only > work happening > > during the iteration is I'm copying the record into an > array. At first, > > sqlite3_step() takes less than a millisecond to run. > After 0-50 > > iterations, it's taking anywhere from 10-100ms. > > > > Does anybody have any insight into what's happening > behind the scenes > > with this function to help me track down the cause? > I appreciate it! > > You should explicitly say what your SQL query is. Without > that we can > only guess. > > My current "psychic" guess is that you are using LIMIT to > obtain those > 200 rows, one "page" at a time, and as you go advancing > "pages" it > becomes slower and slower. > If this is true, then you should re-think your design as > LIMIT just > skips the rows, but it will "generate" them before, > meaning it > becomes slower as you advance on the offset given. > Look at http://www.sqlite.org/cvstrac/wiki?p=ScrollingCursor > (and > notice the "What not to do" at the end, talking about > "LIMIT" and > "OFFSET"). > > If my my psychic abilities are becoming weak, then please > supply your > exact query that is getting slower (and maybe your > database schema) > and then someone can give you an exact answer. > > > Regards, > ~Nuno Lucas > > > > > Mike Borland > > > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@sqlite.org > > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users