David,

I asked a similar question, and here is drh's response to me, adapted
to your situation. I think it is probably applicable to you as well.
I'm not sure this is the type of query that can be made to go really
fast no matter what. I actually haven't gotten around to doing this
yet, so I can't comment on how well it works.


To implement this, SQLite creates a temporary index that contains all
unique values of holiday_list.number. Then it scans through the table
and for each entry where holiday.hol_id is not in the temp index.

Do make sure that your temp tables are stored in RAM.  Compile with
-DTEMP_STORE=2.  Or at run-time set

 PRAGMA temp_store=memory;

That will put the temporary index in RAM and things will tend to go faster.

Brett

On 3/14/06, CARTER-HITCHIN, David, FM <[EMAIL PROTECTED]> wrote:
> Hi,
>
> Hope someone out there can help - I've got this query which runs VERY
> slowly:
>
> SELECT    ab_tran.ins_num, holiday.hol_id, holiday.ins_num
> FROM      ab_tran, holiday
> WHERE     ab_tran.ins_num = holiday.ins_num
> AND       holiday.hol_id NOT IN ( SELECT number from holiday_list )
>
> All the tables are fairly chunky, except holiday_list which has 89 rows.  I
> just realised that holiday.ins_num is needlessly selected but I doubt very
> much that would be causing things to slow down massively.  I can run this on
> a similar powered Sybase server and it runs in a couple of minutes - with
> SQLite, using an in-memory database I've left it all night and it didn't
> finish!  Evidently something is wrong somewhere.  I've created indexes on
> all the columns in the join and the "NOT IN" clause, but that didn't seem to
> help.
>
> Is there anything else I check?
>
> I've run the EXPLAIN (output below), but I'm a novice here, not sure what
> could be wrong.
>
> Any ideas will be highly appreciated.
>
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:476 - 64 rows extracted in
> 0.03532 seconds.
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 0     Goto    0       60
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 1     Integer 0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 2     OpenRead        0
> 3
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 3     SetNumColumns   0
> 7
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 4     Integer 0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 5     OpenRead        1
> 5
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 6     SetNumColumns   1
> 2
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 7     Integer 0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 8     OpenRead        3
> 137675  keyinfo(1,BINARY)
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 9     Rewind  0       56
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 10    Column  0       1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 11    NotNull -1      14
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 12    Pop     1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 13    Goto    0       55
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 14    MakeRecord      1
> 0       i
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 15    MemStore        0
> 0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 16    MoveGe  3       55
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 17    MemLoad 0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 18    IdxGE   3       55
> +
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 19    RowKey  3       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 20    IdxIsNull       1
> 54
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 21    IdxRowid        3
> 0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 22    MoveGe  1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 23    MemLoad 1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 24    If      0       40
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 25    MemInt  1       1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 26    OpenVirtual     4
> 0       keyinfo(1,BINARY)
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 27    SetNumColumns   4
> 1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 28    Integer 0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 29    OpenRead        2
> 6
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 30    SetNumColumns   2
> 1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 31    Rewind  2       39
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 32    Column  2       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 33    NotNull -1      36
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 34    Pop     1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 35    Goto    0       38
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 36    MakeRecord      1
> 0       i
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 37    IdxInsert       4
> 0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 38    Next    2       32
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 39    Close   2       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 40    Integer 1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 41    Column  1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 42    NotNull -1      46
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 43    Pop     2       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 44    Null    0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 45    Goto    0       49
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 46    MakeRecord      1
> 0       i
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 47    Found   4       49
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 48    AddImm  -1      0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 49    If      1       54
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 50    Column  0       1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 51    Column  1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 52    Column  1       1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 53    Callback        3
> 0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 54    Next    3       17
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 55    Next    0       10
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 56    Close   0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 57    Close   1       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 58    Close   3       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 59    Halt    0       0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 60    Transaction     0
> 0
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 61    VerifyCookie    0
> 20
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 62    Goto    0       1
> Tue Mar 14 12:05:10 2006 DEBUG at Cache.cpp:487 - 63    Noop    0       0
>
> Many thanks,
>
> David Carter-Hitchin.
> --
> Royal Bank of Scotland
> Interest Rate Derivatives IT
> 135 Bishopsgate
> LONDON EC2M 3TP
>
> Tel: +44 (0) 207 085 1088
>
>
> ***********************************************************************************
> The Royal Bank of Scotland plc. Registered in Scotland No 90312. Registered 
> Office: 36 St Andrew Square, Edinburgh EH2 2YB.
> Authorized and regulated by the Financial Services Authority
>
> This e-mail message is confidential and for use by the
> addressee only. If the message is received by anyone other
> than the addressee, please return the message to the sender
> by replying to it and then delete the message from your
> computer. Internet e-mails are not necessarily secure. The
> Royal Bank of Scotland plc does not accept responsibility for
> changes made to this message after it was sent.
>
> Whilst all reasonable care has been taken to avoid the
> transmission of viruses, it is the responsibility of the recipient to
> ensure that the onward transmission, opening or use of this
> message and any attachments will not adversely affect its
> systems or data. No responsibility is accepted by The Royal
> Bank of Scotland plc in this regard and the recipient should carry
> out such virus and other checks as it considers appropriate.
> Visit our websites at:
> http://www.rbos.com
> http://www.rbsmarkets.com
> ********************************************************************************
>
>

Reply via email to