sqlite,如何在大型表上更有效地进行选择?

hfwmuf9z  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(205)

你们知道如何使这个选择更快或更有效吗?问题是,这个选择在sqlite上处理要花费数小时以上的时间。我把它和 sqlite3 因此命令有一些限制。

SELECT C.id, COUNT (L.linea_construccion) 
 FROM Linea L, Predio P, Comunas C 
 WHERE L.calidad_construccion = 1 AND C.id = P.comuna
      AND L.comuna = C.id AND P.avaluo_exento > C.avaluo_promedio 
 GROUP BY C.id

数据库中有3个表 Linea 有9mm的行,table Predio 有7mm和table Comunas 大约有250个。
表格格式为: Predio . ( id INT , comuna INT , avaluo_exento INT ) Linea . ( id INT , comuna INT , calidad_construccion INT , linea_construccion INT ) Comuna . ( id INT , avaluo_promedio INT )

42fyovps

42fyovps1#

你应该经常使用 explicit join 为了获得最佳实践 implicit joinwhere 条件。
从表的给定模式中,可以尝试以下操作

SELECT 
  C.id, 
  COUNT (L.linea_construccion) 
 FROM Linea L
 join Predio P
 on L.comuna = P.comuna

 join Comunas C 
 on L.comuna = C.comuna

 where L.calidad_construccion = 1
 AND P.avaluo_exento > C.avaluo_promedio 
 GROUP BY 
  C.id
wr98u20j

wr98u20j2#

首先,使用适当的、显式的、标准的、可读的 JOIN 语法:

SELECT C.id, COUNT(*) 
 FROM Linea L JOIN
      Comunas C
      ON L.comuna = C.id JOIN
      Predio P 
      ON C.id = P.comuna AND P.avaluo_exento > C.avaluo_promedio 
 WHERE L.calidad_construccion = 1 
 GROUP BY C.id ;

从以下索引开始:
Linea(calidad_construccion, comuna) Comunas(id, avaluo_promedio) --如果“id”是主键,则可能不需要 Predio(comuna, avaluo_exento) 根据您拥有的“commonas”数量和返回的数量,您可以通过消除外部 GROUP BY .

相关问题