On Wed, Nov 24, 2010 at 1:13 AM, Paul Sanderson < sandersonforens...@gmail.com> wrote:
> I have a table with over 1 million rows and 20+ columns all of which > are indexed, I reasonably regularly recreate the table with new data > and find that the indexing process takes about 30 minutes. Are there > any settings/tweaks that I can use to reduce the time required to > create the index? > > Paul, thought about it recently. I think there's something you could do if you're ready to change the scheme a little. The index creation involves reading and writing. The size of the index in your case for most of the fields is smaller than the data of the main table so we'll forget about writing, possible it works well using the sqlite and system cache. But your reading for every index should read the whole table and the full record (if it fits on a single page) even if the index needs only one field. This process of full table reading can be comparatively fast (if your base is not fragmented), slow (if it's heavily fragmented) and amazingly fast if your entire table luckily fitted in the os system cache when your first field was indexed. And the latter is possible if your text fields contribute much to the record size and you're ready to move it to a different table accessing later with a join. I don't know your exact numbers, but 1m records with 20 modest integers (using much few bits than 64) should take about 50MB-100MB and many modern software/hardware configurations will possibly read it just once accessing this data from the cache when your second and later indexes are created. Max Vlasov _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users