Ignore this as I found out what the trouble was.
I dropped 2 indices from the table ADDRESSLINK as they were on fields
where the values were nearly all the same. Forgot now what the technical
term for it is, but it solved it all and now very fast.
Great software this SQLite!

RBS

-----Original Message-----
From: RB Smissaert [mailto:[EMAIL PROTECTED] 
Sent: 26 November 2006 10:04
To: sqlite-users@sqlite.org
Subject: [sqlite] slow query

Although SQLite seems very fast, I now have come across a query that runs
extremely slow and I would be interested why this is:

There are 3 tables involved, all fairly small, some 25000 rows:
PATIENT, ADDRESS and ADDRESSLINK
All the relevant fields are indexed.

This is the query:

SELECT
P.PATIENT_ID, P.OLD_EXTERNAL_NO, P.FORENAME_1, P.SURNAME, P.DATE_OF_BIRTH,
P.GENDER_TYPE, A.ADDRESS_LINE_2, P.REGISTERED_GP
FROM
PATIENT P LEFT JOIN ADDRESSLINK AL ON (P.PATIENT_ID = AL.FOREIGN_ID AND
AL.ADDRESS_TYPE = 1 AND AL.ADDRESS_LINK_TYPE = 2)
LEFT JOIN ADDRESS A ON (A.ADDRESS_ID = AL.ADDRESS_ID)
WHERE
P.MAIN_REG_TYPE = 1 AND A.ADDRESS_LINE_1 LIKE '%ave%'
ORDER BY P.PATIENT_ID ASC

These are the table definitions, where the numbers are the rootpage:

table   ADDRESS ADDRESS 2       CREATE TABLE [ADDRESS] ([ADDRESS_ID]
INTEGER, [ADDRESS_LINE_1] TEXT, [POSTCODE] TEXT, [UPDATED_DATE] INTEGER,
[ADDRESS_LINE_2] TEXT, [ADDRESS_LINE_3] TEXT, [ADDRESS_LINE_4] TEXT,
[ADDRESS_LINE_5] TEXT)
index   IDX0ADDRESS     ADDRESS 312     CREATE UNIQUE INDEX IDX0ADDRESS ON
ADDRESS(ADDRESS_ID)
index   IDX1ADDRESS     ADDRESS 362     CREATE INDEX IDX1ADDRESS ON
ADDRESS(ADDRESS_LINE_1)
index   IDX2ADDRESS     ADDRESS 411     CREATE INDEX IDX2ADDRESS ON
ADDRESS(POSTCODE)
index   IDX3ADDRESS     ADDRESS 493     CREATE INDEX IDX3ADDRESS ON
ADDRESS(UPDATED_DATE)
index   IDX4ADDRESS     ADDRESS 551     CREATE INDEX IDX4ADDRESS ON
ADDRESS(ADDRESS_LINE_2)
index   IDX5ADDRESS     ADDRESS 665     CREATE INDEX IDX5ADDRESS ON
ADDRESS(ADDRESS_LINE_3)
index   IDX6ADDRESS     ADDRESS 753     CREATE INDEX IDX6ADDRESS ON
ADDRESS(ADDRESS_LINE_4)
index   IDX7ADDRESS     ADDRESS 856     CREATE INDEX IDX7ADDRESS ON
ADDRESS(ADDRESS_LINE_5)

table   ADDRESSLINK     ADDRESSLINK     899     CREATE TABLE [ADDRESSLINK]
([ADDRESS_LINK_ID] INTEGER, [ADDRESS_ID] INTEGER, [FOREIGN_ID] INTEGER,
[ADDRESS_TYPE] INTEGER, [ADDRESS_LINK_TYPE] INTEGER)
index   IDX0ADDRESSLINK ADDRESSLINK     1033    CREATE UNIQUE INDEX
IDX0ADDRESSLINK ON ADDRESSLINK(ADDRESS_LINK_ID)
index   IDX1ADDRESSLINK ADDRESSLINK     1111    CREATE INDEX IDX1ADDRESSLINK
ON ADDRESSLINK(ADDRESS_ID)
index   IDX2ADDRESSLINK ADDRESSLINK     1184    CREATE INDEX IDX2ADDRESSLINK
ON ADDRESSLINK(FOREIGN_ID)
index   IDX3ADDRESSLINK ADDRESSLINK     1253    CREATE INDEX IDX3ADDRESSLINK
ON ADDRESSLINK(ADDRESS_TYPE)
index   IDX4ADDRESSLINK ADDRESSLINK     1319    CREATE INDEX IDX4ADDRESSLINK
ON ADDRESSLINK(ADDRESS_LINK_TYPE)

table   PATIENT PATIENT 313541  CREATE TABLE [PATIENT] ([PATIENT_ID]
INTEGER, [USUALLY_SEEN_GP] INTEGER, [ADDED_BY] INTEGER, [UPDATED_BY]
INTEGER, [FHSA_ID] INTEGER, [DHA_ID] INTEGER, [REGISTERED_GP] INTEGER,
[ROUTE_MARKER_TYPE] INTEGER, [MAIN_REG_TYPE] INTEGER, [GENDER_TYPE] INTEGER,
[SURGERY_ID] INTEGER, [ACCEPTANCE_TYPE] INTEGER, [RESIDENTIAL_INSTITUTE]
INTEGER, [QUALIFIER_REG_TYPE] INTEGER, [CHI_NUMBER] TEXT, [DATE_OF_BIRTH]
INTEGER, [FORENAME_1] TEXT, [FORENAME_2] TEXT, [NHS_NUMBER] TEXT, [SURNAME]
TEXT, [DISPENSING_FLAG] INTEGER, [ALIAS] TEXT, [RURAL_MILEAGE] INTEGER,
[WALKING_UNITS] INTEGER, [PREVIOUS_NHS_NUMBER] TEXT, [PREVIOUS_SURNAME]
TEXT, [UPDATED_DATE] INTEGER, [PREVIOUS_DATE_OF_BIRTH] INTEGER,
[MARITAL_STATUS_TYPE] INTEGER, [DATE_OF_DEATH_ACCURACY] INTEGER,
[DATE_OF_DEATH] INTEGER, [TITLE_TEXT] TEXT, [REGISTRATION_SOURCE] INTEGER,
[REGISTRATION_START_DATE] INTEGER, [REGISTRATION_REMOVAL_SOURCE] INTEGER,
[REGISTRATION_REMOVAL_REASON] INTEGER, [REGISTRATION_ACCEPTANCE_DATE]
INTEGER, [REGISTRATION_REMOVAL_DATE] INTEGER, [REGISTRATION_CONFIRMED]
INTEGER, [REGISTRATION_END_DATE] INTEGER, [SECURE_FLAG] INTEGER,
[DORMANT_FLAG] INTEGER, [MEDICAL_RECORDS_FLAG] INTEGER, [MRF_DATE] INTEGER,
[LINK_STATUS] INTEGER, [ACCEPTANCE_TRANS_NO] INTEGER, [DEDUCTION_TRANS_NO]
INTEGER, [OLD_INTERNAL_NO] INTEGER, [OLD_EXTERNAL_NO] TEXT,
[STAFF_MEMBER_FLAG] INTEGER, [PREVIOUS_SURNAME2] TEXT, [MOD_OLD_SERVICE_NO]
TEXT, [PREVIOUS_CHI_NUMBER] TEXT, [FOOTPATH_MILES] TEXT, [WATER_MILES] TEXT,
[BIRTH_SURNAME] TEXT, [OTHER_FORENAMES] TEXT, [SCRIPT_DISPOSAL_DEST]
INTEGER, [FP69_STATUS] INTEGER, [FP69_DATE_AMENDED] INTEGER,
[FP69_DATE_DEDUCTED] INTEGER, [MRF_FORWARDED_DATE] INTEGER,
[DEDUCTION_REQUESTED] INTEGER, [FP69_EXPIRY_DATE] INTEGER, [FP69_REASON]
INTEGER, [FP69_FHSA_NOTES] TEXT, [RESPONSIBLE_HA] INTEGER, [CARER_FLAG]
INTEGER, [DEDUCTION_PENDING] INTEGER, [BULK_TRANSFER_DATE] INTEGER)
index   IDX0PATIENT     PATIENT 314906  CREATE UNIQUE INDEX IDX0PATIENT ON
PATIENT(PATIENT_ID)
index   IDX1PATIENT     PATIENT 314979  CREATE INDEX IDX1PATIENT ON
PATIENT(USUALLY_SEEN_GP)
index   IDX2PATIENT     PATIENT 315044  CREATE INDEX IDX2PATIENT ON
PATIENT(REGISTERED_GP)
index   IDX3PATIENT     PATIENT 315109  CREATE INDEX IDX3PATIENT ON
PATIENT(MAIN_REG_TYPE)
index   IDX4PATIENT     PATIENT 315173  CREATE INDEX IDX4PATIENT ON
PATIENT(DATE_OF_BIRTH)
index   IDX5PATIENT     PATIENT 315255  CREATE INDEX IDX5PATIENT ON
PATIENT(NHS_NUMBER)
index   IDX6PATIENT     PATIENT 315370  CREATE INDEX IDX6PATIENT ON
PATIENT(UPDATED_DATE)
index   IDX7PATIENT     PATIENT 315452  CREATE INDEX IDX7PATIENT ON
PATIENT(REGISTRATION_START_DATE)
index   IDX8PATIENT     PATIENT 315534  CREATE INDEX IDX8PATIENT ON
PATIENT(REGISTRATION_REMOVAL_DATE)


Thanks for any advice on how this could be improved.


RBS






----------------------------------------------------------------------------
-
To unsubscribe, send email to [EMAIL PROTECTED]
----------------------------------------------------------------------------
-




-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to