[Python] O non capisco sqlite, o non capisco sqlalchemy, o entrambi

Matteo Vitturi mattsteel a hotmail.it
Lun 18 Nov 2013 17:22:25 CET




[...]
> 
> Per capire, mi sono andato a vedere la query che sqlalchemy genera, ed è
> come segue:
> 
> "SELECT a.id AS a_id, a.col AS a_col FROM a, arel WHERE ? = arel.id1 AND
> a.id = arel.id2", la_mia_id
> 
> Provando a chiamare direttamente questa query direttamente con sqlite,
> in effetti ottengo lo stesso effetto che usando l'ORM di slqalchemy.
> 
> Ora, le mie conoscenze/ricerche di SQL sono sufficienti per farmi capire
> che questa è una JOIN implicita, e qual'è la sua logica. Però non
> capisco:
> 1) dal punto di vista implementativo: com'è possibile che una JOIN sia
> così più lenta di svariate SELECT che fanno (concettualmente, per quel
> che ne posso capire) esattamente lo stesso lavoro?!
> 2) ammesso che debba essere così, cosa impedisce a sqlalchemy di usare
> le stesse SELECT che uso io, per recuperare esattamente la stessa roba?!
[...]
> Pietro

Sqlite accede a AREL cercando id1=la_mia_id: in assenza di indice su AREL.id1 effettua una ricerca lineare. Supponiamo pure che questo per scorrere tutta la tabella serva un decimo di secondo.
Per ogni riga ottenuta accede alla tabella A cercando quale "id" batta: in assenza di indice su A.id effettua una ricerca lineare, ogni volta impiegando un decimo di secondo per scorrere tutta la tabella.
Ora, con milioni di decimi di secondo si si arriva facilmente a qualche giorno di esecuzione...

Aggiungi due indici.
M.


 		 	   		  
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131118/1f20c4bd/attachment.html>


Maggiori informazioni sulla lista Python