We are experiencing incredibly slow delete times when deleting a large number 
of rows:-

We are using SQLite on an embdedded platform with an ARM7 processor, 2Mb RAM 
and 32Mb NOR Flash memory 25Mb of which is allocated for storage for our 
database. 

There are 3 tables in the database but the two we are concerned with here are 
created as follows:-

CREATE TABLE EXAMINATIONS (
        'EXAM_ID' integer PRIMARY KEY AUTOINCREMENT,
        'PATIENT_ID' varchar(15) NOT NULL,
        'STATUS_FLAG' smallint,
        'DATE' timestamp,
        'EXAM_TYPE' smallint, 
        'DATE' timestamp,
        'EXAM_TYPE' smallint,
        'HEIGHT' smallint,
        'WEIGHT' smallint,
        'DYSPNOEA_SCORE' smallint,
        'NOTES' varchar(450),
        FOREIGN KEY (PATIENT_ID) REFERENCES PATIENTS(PATIENT_ID) ON DELETE 
CASCADE )

CREATE TABLE SPIRO_TEST(
        'TEST_ID' integer PRIMARYKEY AUTOINCREMENT,
        'EXAM_ID' integer NOT NULL,
        'STATUS_FLAG' smallint,
        'TEST_TYPE' smallint,
        'DATE' timestamp,
        'CONTENT' blob,
        FOREIGN KEY (EXAM_ID) REFERENCES EXAMINATIONS(EXAM_ID) ON DELETE 
CASCADE )

Note: the following columns are indexed:-

EXAMINATIONS:-

PATIENT_ID
DATE
EXAM_TYPE
STATUS_FLAG

SPIRO_TEST

EXAM_ID



It is taking 6 minutes just to execute the following SQL:-

DELETE FROM SPIRO_TEST

Where SPIRO_TEST contains 11,601 records.

In reality we will never peform the above SQL on the database, we did this only 
to test how long it would take to delete all the records from the SPIRO_TEST 
table.

We did this as during testing we noticed that when running the following SQL it 
took 11 minutes to complete:-

DELETE FROM EXAMINATIONS WHERE DATE < datetime('2005-10-11 00:00:00')

There is a trigger on the SPIRO_TEST table to clear out related records in the 
module tables when an exam is deleted as such:-

CREATE TRIGGER MODULE_EXAM_TRIGG
BEFORE DELETE ON EXAMINATIONS
        FOR EACH ROW BEGIN
                DELETE FROM SPIRO_TEST WHERE EXAM_ID = OLD.EXAM_ID
        END;

We have also tried removing this trigger and deleting related records from the 
SPIRO_TEST table maunually before deleting the exams but this took 20 minutes 
to complete.

We also notice that queries generally run slower when the database contains a 
large number of records.

Can anyone please help us determine what the problem is and suggest any fix?


Kind Regards

Mark Allan


PS

The SQL:- DELETE FROM EXAMINATIONS WHERE DATE < datetime('2005-10-11 
00:00:00'), when the trigger exists, results in the following opcodes:-

0       Goto    0       112     
1       Statement       0       0       
2       Integer 0       0       
3       OpenRead        2       14      keyinfo(1,BINARY)
4       KeyAsData       2       1       
5       SetNumColumns   2       2       
6       String8 0       0       11/10/2005 00:00
7       Function        1       1       dateTime(1)
8       NotNull -1      11      
9       Pop     1       0       
10      Goto    0       21      
11      MakeRecord      1       0       n
12      MemStore        0       1       
13      Rewind  2       21      
14      MemLoad 0       0       
15      IdxGE   2       21      
16      RowKey  2       0       
17      IdxIsNull       1       20      
18      IdxRecno        2       0       
19      ListWrite       0       0       
20      Next    2       14      
21      Close   2       0       
22      OpenPseudo      0       0       
23      SetNumColumns   0       9       
24      ListRewind      0       0       
25      ListRead        0       110     
26      Dup     0       0       
27      Integer 0       0       
28      OpenRead        1       9       # EXAMINATIONS
29      SetNumColumns   1       9       
30      MoveGe  1       0       
31      Recno   1       0       
32      RowData 1       0       
33      PutIntKey       0       0       
34      Close   1       0       
35      ContextPush     0       0       # begin trigger fkd_SPIRO_TEST_EXAM_ID
36      ResetCount      0       0       
37      Integer 0       0       
38      OpenRead        4       19      keyinfo(1,BINARY)
39      KeyAsData       4       1       
40      SetNumColumns   4       2       
41      Recno   0       0       
42      NotNull -1      45      
43      Pop     1       0       
44      Goto    0       55      
45      MakeRecord      1       0       i
46      MemStore        1       0       
47      MoveGe  4       55      
48      MemLoad 1       0       
49      IdxGE   4       55      +
50      RowKey  4       0       
51      IdxIsNull       1       54      
52      IdxRecno        4       0       
53      ListWrite       0       0       
54      Next    4       48      
55      Close   4       0       
56      ListRewind      0       0       
57      Integer 0       0       
58      OpenWrite       3       16      # SPIRO_TEST
59      SetNumColumns   3       6       
60      Integer 0       0       
61      OpenWrite       4       20      keyinfo(1,BINARY)
62      Integer 0       0       
63      OpenWrite       5       19      keyinfo(1,BINARY)
64      ListRead        0       76      
65      NotExists       3       75      
66      Recno   3       0       
67      Column  3       2       
68      MakeRecord      1       16777216        i
69      IdxDelete       4       0       
70      Recno   3       0       
71      Column  3       1       
72      MakeRecord      1       16777216        i
73      IdxDelete       5       0       
74      Delete  3       1       
75      Goto    0       64      
76      ListReset       0       0       
77      Close   4       20      
78      Close   5       19      
79      Close   3       0       
80      ResetCount      1       0       
81      ContextPop      0       0       # end trigger fkd_SPIRO_TEST_EXAM_ID
82      Integer 0       0       
83      OpenWrite       1       9       # EXAMINATIONS
84      SetNumColumns   1       9       
85      Integer 0       0       
86      OpenWrite       2       15      keyinfo(1,BINARY)
87      Integer 0       0       
88      OpenWrite       3       14      keyinfo(1,BINARY)
89      Integer 0       0       
90      OpenWrite       4       13      keyinfo(1,BINARY)
91      NotExists       1       105     
92      Recno   1       0       
93      Column  1       4       
94      MakeRecord      1       16777216        i
95      IdxDelete       2       0       
96      Recno   1       0       
97      Column  1       3       
98      MakeRecord      1       16777216        n
99      IdxDelete       3       0       
100     Recno   1       0       
101     Column  1       1       
102     MakeRecord      1       16777216        t
103     IdxDelete       4       0       
104     Delete  1       1       
105     Close   2       15      
106     Close   3       14      
107     Close   4       13      
108     Close   1       0       
109     Goto    0       25      
110     ListReset       0       0       
111     Halt    0       0       
112     Transaction     0       1
113     VerifyCookie    0       17
114     Goto    0       1
115     Noop    0       0


DISCLAIMER:
This information and any attachments contained in this email message is 
intended only for the use of the individual or entity to which it is addressed 
and may contain information that is privileged, confidential, and exempt from 
disclosure under applicable law.  If the reader of this message is not the 
intended recipient, or the employee or agent responsible for delivering the 
message to the intended recipient, you are hereby notified that any 
dissemination, distribution, forwarding, or copying of this communication is 
strictly prohibited.  If you have received this communication in error, please 
notify the sender immediately by return email, and delete the original message 
immediately.

Reply via email to