Hi,
the condition in your query
select achr,bchr from c where achr=bchr
involves 2 columns of the table. In this case, an index is useless.
If you do
select achr,bchr from c where achr='foo'
then the index will be used.
Martin
Am 15.10.2010 15:09, schrieb Black, Michael (IS):
> Ok then... I added 67,600 records like this and still no index use.
>
> SQLite version 3.7.2
> sqlite> select count(*) from c;
> 67600
> sqlite> explain query plan select achr,bchr from c where achr=bchr;
> 0|0|TABLE c
> sqlite> create index c_chr on c(achr,bchr);
> sqlite> explain query plan select achr,bchr from c where achr=bchr;
> 0|0|TABLE c
>
> Here's my record add:
> #include<stdio.h>
> #include<stdlib.h>
> #include "sqlite3.h"
> int main()
> {
> sqlite3 *db;
> char *errmsg=NULL;
> int rc;
> int i,j,k;
> sqlite3_open("test.db",&db);
> rc=sqlite3_exec(db, "CREATE TABLE c (achr char, bchr
> char)",NULL,NULL,&errmsg);
> if (rc != SQLITE_OK) {
> puts(errmsg);
> sqlite3_free(errmsg);
> }
> sqlite3_exec(db,"BEGIN",NULL,NULL,&errmsg);
> for(k=0;k<100;k++) {
> for(i=0;i<26;i++) {
> char sql[4096];
> for(j=0;j<26;j++) {
> sprintf(sql,"INSERT INTO c VALUES ('%c','%c')",'a'+i,'a'+j);
> rc=sqlite3_exec(db, sql,NULL,NULL,&errmsg);
> if (rc != SQLITE_OK) {
> puts(sql);
> puts(errmsg);
> sqlite3_free(errmsg);
> exit(-1);
> }
> }
> }
> }
> sqlite3_exec(db,"COMMIT",NULL,NULL,&errmsg);
> sqlite3_close(db);
> return 0;
> }
>
> Michael D. Black
> Senior Scientist
> Advanced Analytics Directorate
> Northrop Grumman Information Systems
>
>
> ________________________________
>
> From: [email protected] on behalf of luuk34
> Sent: Fri 10/15/2010 7:40 AM
> To: General Discussion of SQLite Database
> Subject: EXTERNAL:Re: [sqlite] How to optimize a multi-condition query
>
>
>
>
> On 15-10-10 14:34, Black, Michael (IS) wrote:
>> I love simple examples like this can help people with understanding
>> things...so I tried this which I thought would do what Hilmar wants...but
>> alas....what concept am I missing?
>>
>> SQLite version 3.7.2
>> sqlite> create table c(achr char,bchr char);
>> sqlite> create index c_chr on c(achr,bchr);
>> sqlite> explain query plan select achr,bchr from c where achr=bchr;
>> 0|0|TABLE c
>>
>> Why no use of the index in this case?
>>
> because there are no records in the database,
> so its quicker to read just all records,
> than to read all record in the order of the index...
>
> --
> Luuk
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
>
>
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users