move the join to immediately follow the FROM clause remove the word "left"
> -----Original Message----- > From: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] > On Behalf Of MONSTRUO Hugo González > Sent: Monday, 27 March, 2017 09:35 > To: sqlite-users@mailinglists.sqlite.org > Subject: [sqlite] change ORDER BY slowly > > Hi, > > I have a phone book (bm_ppal), 726.000 rows, 10 columns > > This phone book have this columns > Name Declared Type Type Size > nbmId INTEGER INTEGER > nbmCodigo VARCHAR (6) VARCHAR 6 > abmNombre VARCHAR (320) VARCHAR 320 > abmNombrePlano VARCHAR (320) VARCHAR 320 > nbmCiudad INTEGER INTEGER > nbmTelefono VARCHAR (9) VARCHAR 9 > nbmCalle INTEGER INTEGER > nbmNroPuerta VARCHAR (5) VARCHAR > nbmLongitud VARCHAR (5) VARCHAR > nbmLatitud VARCHAR (5) VARCHAR > > I use c# winform datagridview virtualmode > > The file.sqlite is in: https://1drv.ms/u/s!Ar9mkZ1CPa2WhkUSJLxLI0WKV_TP > > I have this sqlite sentence for read the file, very fast: 157 ms > > SELECT bm_ppal.nbmId, bm_ppal.nbmCodigo, bm_ppal.abmNombre, > bm_ppal.nbmCiudad, ciudad.a47Nombre, ciudad.n47Depart, depto.a46Nombre, > > bm_ppal.nbmTelefono, bm_ppal.nbmCalle, bm_calles.abmNombre, > bm_ppal.nbmNroPuerta, bm_ppal.nbmLongitud, bm_ppal.nbmLatitud > FROM bm_ppal > LEFT JOIN ciudad ON ciudad.n47Id = bm_ppal.nbmCiudad > LEFT JOIN bm_calles ON bm_calles.nbmId = bm_ppal.nbmCalle > LEFT JOIN depto ON depto.n46Id = ciudad.n47Depart > ORDER BY bm_ppal.nbmId > LIMIT 512 > OFFSET 0 > 157ms > > I have this sqlite sentence for read the file, change the ORDER BY, very > fast: 135ms > > SELECT bm_ppal.nbmId, bm_ppal.nbmCodigo, bm_ppal.abmNombre, > bm_ppal.nbmCiudad, ciudad.a47Nombre, ciudad.n47Depart, depto.a46Nombre, > > bm_ppal.nbmTelefono, bm_ppal.nbmCalle, bm_calles.abmNombre, > bm_ppal.nbmNroPuerta, bm_ppal.nbmLongitud, bm_ppal.nbmLatitud > FROM bm_ppal > LEFT JOIN ciudad ON ciudad.n47Id = bm_ppal.nbmCiudad > LEFT JOIN bm_calles ON bm_calles.nbmId = bm_ppal.nbmCalle > LEFT JOIN depto ON depto.n46Id = ciudad.n47Depart > ORDER BY bm_ppal.abmNombre, bm_ppal.nbmId > LIMIT 512 > OFFSET 0 > 135ms > > but when I change the ORDER BY with an attributt of other table is very > slowly: 5699 ms > > SELECT bm_ppal.nbmId, bm_ppal.nbmCodigo, bm_ppal.abmNombre, > bm_ppal.nbmCiudad, ciudad.a47Nombre, ciudad.n47Depart, depto.a46Nombre, > > bm_ppal.nbmTelefono, bm_ppal.nbmCalle, bm_calles.abmNombre, > bm_ppal.nbmNroPuerta, bm_ppal.nbmLongitud, bm_ppal.nbmLatitud > FROM bm_ppal > LEFT JOIN ciudad ON ciudad.n47Id = bm_ppal.nbmCiudad > LEFT JOIN bm_calles ON bm_calles.nbmId = bm_ppal.nbmCalle > LEFT JOIN depto ON depto.n46Id = ciudad.n47Depart > ORDER BY bm_calles.abmNombre > LIMIT 512 > OFFSET 0 > 5699ms ?? > > I create the index with: > > CREATE INDEX IF NOT EXISTS idxbm_calles2 ON bm_calles(abmNombre); > > where I create an index in the table bm_ppal for bm_calles(abmNombre) with > the LEFT JOIN bm_calles ON bm_calles.nbmId = bm_ppal.nbmCalle > > How I can optimize it ? > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users