Perfect solution as long as there is a no index option along with index by.
On Sep 26, 2008, at 12:54 PM, Russell Leighton <[EMAIL PROTECTED] > wrote: > I have another scenario where this is needed , the one in the subject. > I repeated this problem this AM. > > I need a 2 key index for some queries and also want to aggregate on > these 2 columns. I need this index BUT I have many large sqlite dbs I > iterate over and they won't fit in the filesystem cache. Run time when > the index is present is 105min. Run time with out the index is 3min. > > I see no way a simple query planner can account for factors like > available ram, disk io speeds and CPU speeds. The solution DRH > suggests is perfect for my needs. > > > > On Sep 26, 2008, at 12:38 PM, "D. Richard Hipp" <[EMAIL PROTECTED]> wrote: > >> >> On Sep 25, 2008, at 10:37 PM, Alex Scotti wrote: >>> >>> >>> read http://www.ibm.com/developerworks/db2/library/tips/dm-0312yip/ >>> index.html as well if you could. >>> >>> >>> i implore you all to take the high road here. >> >> >> I agree with philosophy expressed at the link above: "If [the RDBMS] >> does not choose the optimal access plan and the poor access plan is >> not due to a limitation inherent in the query, we consider it a >> defect >> in the product and prefer to fix the problem at the source so that >> all ... users may benefit ...." The intent of the INDEXED BY syntax >> in SQLite is *not* to provide users a way to tune queries. The >> problem we are attempting to solve is one of detecting a performance >> regression due to coding erors. Here are the two problem reports from >> real SQLite users that we are trying to resolve: >> >> (1) A workstation application uses SQLite as its database file >> format. During a product enhancement, one of the indices in the >> schema was deleted by mistake, which caused certain queries to run >> much slower. But the slowdown was not detected during testing >> because >> very large application files were necessary for the slowdown to >> appear. The vendor asks for some way to detect during testing that >> the query plan has changed. >> >> (2) A web portal uses SQLite databases to store per-customer state >> information - one SQLite database per customer. These millions of >> SQLite database are stored on a network filesystem. Access must be >> efficient in order to prevent the file servers from being >> overwhelmed. If a critical index is deleted by mistake, the >> applications will still work fine during testing (because SQLite will >> just use a different query plan) but might buckle under real-world >> loads. There is a significant chance that the problem will not be >> detected until the upgrade is moved into production and millions of >> users start pounding on it all at once. The vendor lives in terror >> of >> this scenario and would like a way to detect the query plan change >> early - before a large scale rollout and subsequent disruption of >> their service. >> >> The MySQL, Oracle, and MSSQL hinting solutions are not applicable to >> the above problems because they are only hints. If the hints cannot >> be satisfied, the query plan silently reverts to something else. But >> in my proposed INDEXED BY clause, if the query plan specified by the >> INDEXED BY clause cannot be used, then the query fails with an error. >> This allows developers to detect problems in a few critical queries >> early, before a large rollout. To put it another way, the INDEXED BY >> clause is more like a CHECK constraint than a hint - only that the >> constraint applies to the query plan instead of the database content. >> >> My original idea on how to solve the problems above was to provide >> some new API that returned an estimate of the performance for a >> prepared statement. Then an index change that caused (for example) >> an >> O(logN) to O(N) performance regression could be detected using the >> new >> API. That sounds like a good approach upon first hearing, but as we >> have dug deeper, we have uncovered many subtleties that make it much >> less appealing. The INDEXED BY clause, in contrast, is simple, >> direct, and gets the job done with remarkably little fuss. >> >> >> >> D. Richard Hipp >> [EMAIL PROTECTED] >> >> >> >> _______________________________________________ >> 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