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]
-----------------------------------------------------------------------------

Reply via email to