Re: Re[2]: [sqlite] index question

2005-11-21 Thread Jay Sprenkle
FYI:
If you have a very small number of rows in the table and index will
make it slower,
rather than faster.

On 11/21/05, Wilfried Mestdagh <[EMAIL PROTECTED]> wrote:
> Hi Bert,
>
> >>'select distinct Name ' +
> >>  'from Rx ' +
> >>  'where RxDT >= ' + DT + ' ' +
> >>  'order by Name'
>
> One thing is not yet clear to me. That is the 'distinct'. To have this
> as fast as possible I have to make also a separate index on "RxDt,
> Name". Is that correct ?  (or the way around: "Name, RxDt" ?)


Re[2]: [sqlite] Index question

2004-10-27 Thread Christian Smith
On Wed, 27 Oct 2004, Taka Muraoka wrote:

>UP> Hi Taka,
>
>>>
>>> These are stored in tables like this:
>>>
>>> CREATE TABLE object
>>> (
>>> object_id INTEGER PRIMARY KEY
>>> ) ;
>>>
>>> CREATE TABLE item
>>> (
>>> object_id INTEGER ,
>>> seq_no INTEGER
>>> ) ;
>>>
>>> We retrieve items for a given object using this:
>>>
>>> SELECT * FROM item
>>> WHERE object_id = 12345
>>> ORDER BY seq_no ;
>>>
>>> To speed up this up, I want to create an index on the item table. Am I
>>> better off creating it on the object_id column alone or both object_id
>>> and seq_no? What's the difference if I create a primary key on the item
>>> table using object_id/seq_no?
>
>UP> If there is more than one row with the same object_id, you cannot use
>UP> object_id as a primary key for the item table.  Primary keys need to be
>UP> unique for the table in question, so in your case, if you wish to use a
>UP> primary key, you must use both object_id AND seq_no for the item table.
>
>Yes, there may be more than one row in the item table with the same
>object_id. I'm asking which of these is better (i.e. faster):
>
>- no primary key but an index on object_id


Depends on how many items you'll have per object_id. If it's a small
number, then you could just use object_id for index and sort the items
result set.

Would make inserts and updates quicker than the indexes below.


>- no primary key but an index on object_id *and* seq_no
>- a primary key of object_id and seq_no but no index.


These two are probably similar, both in performance and implementation.

One of these is probably your best bet, I'd say the first.


>- a primary key of object_id and seq_no and an index on object_id.

Not worth bothering. The index of (object_id,seq_no) can be used for index
searches for just object_id, I believe. SQLite will also only use a single
index per table when optimizing.


Christian


-- 
/"\
\ /ASCII RIBBON CAMPAIGN - AGAINST HTML MAIL
 X   - AGAINST MS ATTACHMENTS
/ \