Hi Dan,

thanks for your answers: this was exactly what I was looking for.

Dan wrote:
> On May 27, 2009, at 9:08 PM, Marcus Grimm wrote:
>>
>> The difference, I guess, to a "real" sql table, is that it is sorted
>> with respect to the indexed column and not by row_id, something that
>> makes them different to a standard sql table, am I right ?
> 
> Pretty much. Obviously there are a ton of details, but what you have is
> a good mental model for practical purposes.

I can imagine that you folks have a bunch of issue with indexes...
Thanks, for confirming my "mental model".

> 
>> I often have to deal with columns which are UIDs that have a length
>> of say 128 bytes and that will be the majority (in terms of byte-size)
>> of that table. If I would now create an index on such a UID I will  
>> basically
>> double the database size, correct ?
>> (I know I can experiment this by my selve, but maybe a sql-guru here  
>> has allready
>> the answer)
> 
> If you have a schema:
> 
>    CREATE TABLE t1(a INTEGER PRIMARY KEY, b UUID);
> 
> And then create an index on column b, you will probably double the size
> of the database, yes.

Okay, that was the key question for me.

>>
>> CREATE TABLE T1(A, B, C);
>> CREATE INDEX T1Idx ON T1(B,C);
> 
> It's like a table that contains columns B and C, and the rowid. The
> table is sorted in the same order as the results of:
> 
>    SELECT b, c, rowid FROM t1 ORDER BY b, c;
> 

An interesting way to express how this index is build. Thank you.

> 
>> ...
>> SELECT * FROM T1 WHERE B=3;
>>
>> as far as I know this will most likely not use the index, but then  
>> I'm curious what
>> is the benefit or application of a compound index compared to two  
>> single indexes ?
> 
> Such a query can use the compound index T1Idx above. It can do the  
> following
> too:
> 
>    WHERE b = 3 AND c = 4;
>    WHERE b = 3 AND c > 4;
> 
> but cannot be used to optimize:
> 
>    WHERE c = 4;

Ahh... I picked up the wrong example... Great, this is exactly inline
how I was thinking how it might work.
I guess such compound indexes have only a benefit for specific
queries, like the above that use all the time exactly these two
columns, otherwise two seperate indexes will do the same job but maybe
a little slower due to additional overhead to scan two index tables.

Thanks again for the useful advice.

kind regards

Marcus




> 
> Dan.
> 
> 
> _______________________________________________
> 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

Reply via email to