perf(pos): eliminar JOIN vehicle_parts de queries de navegacion
vehicle_parts tiene 14B+ rows. Las queries de brands, models, years, engines ahora solo usan model_year_engine (mucho mas rapido). vehicle_parts solo se consulta para categories/groups/parts donde se filtra por un mye_id especifico. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,23 +18,13 @@ import re
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
def get_brands(master_conn):
|
||||
"""Get all vehicle brands that have at least one part in the catalog.
|
||||
|
||||
Uses EXISTS on model_year_engine + vehicle_parts to avoid scanning
|
||||
vehicle_parts fully. The subquery stops at the first match per brand.
|
||||
"""
|
||||
"""Get all vehicle brands that have MYE entries (fast, no vehicle_parts scan)."""
|
||||
cur = master_conn.cursor()
|
||||
cur.execute("""
|
||||
SELECT DISTINCT b.id_brand, b.name_brand
|
||||
FROM brands b
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM models m
|
||||
JOIN model_year_engine mye ON mye.model_id = m.id_model
|
||||
JOIN vehicle_parts vp ON vp.model_year_engine_id = mye.id_mye
|
||||
WHERE m.brand_id = b.id_brand
|
||||
LIMIT 1
|
||||
)
|
||||
JOIN models m ON m.brand_id = b.id_brand
|
||||
JOIN model_year_engine mye ON mye.model_id = m.id_model
|
||||
ORDER BY b.name_brand
|
||||
""")
|
||||
rows = cur.fetchall()
|
||||
@@ -43,19 +33,13 @@ def get_brands(master_conn):
|
||||
|
||||
|
||||
def get_models(master_conn, brand_id):
|
||||
"""Get models for a brand that have at least one MYE with parts."""
|
||||
"""Get models for a brand that have MYE entries (fast, no vehicle_parts scan)."""
|
||||
cur = master_conn.cursor()
|
||||
cur.execute("""
|
||||
SELECT DISTINCT m.id_model, m.name_model
|
||||
FROM models m
|
||||
JOIN model_year_engine mye ON mye.model_id = m.id_model
|
||||
WHERE m.brand_id = %s
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM model_year_engine mye
|
||||
JOIN vehicle_parts vp ON vp.model_year_engine_id = mye.id_mye
|
||||
WHERE mye.model_id = m.id_model
|
||||
LIMIT 1
|
||||
)
|
||||
ORDER BY m.name_model
|
||||
""", (brand_id,))
|
||||
rows = cur.fetchall()
|
||||
@@ -64,19 +48,13 @@ def get_models(master_conn, brand_id):
|
||||
|
||||
|
||||
def get_years(master_conn, model_id):
|
||||
"""Get distinct years for a model (via MYE) that have parts. Ordered DESC."""
|
||||
"""Get distinct years for a model via MYE (fast, no vehicle_parts scan). Ordered DESC."""
|
||||
cur = master_conn.cursor()
|
||||
cur.execute("""
|
||||
SELECT DISTINCT y.id_year, y.year_car
|
||||
FROM years y
|
||||
JOIN model_year_engine mye ON mye.year_id = y.id_year
|
||||
WHERE mye.model_id = %s
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM vehicle_parts vp
|
||||
WHERE vp.model_year_engine_id = mye.id_mye
|
||||
LIMIT 1
|
||||
)
|
||||
ORDER BY y.year_car DESC
|
||||
""", (model_id,))
|
||||
rows = cur.fetchall()
|
||||
@@ -85,19 +63,13 @@ def get_years(master_conn, model_id):
|
||||
|
||||
|
||||
def get_engines(master_conn, model_id, year_id):
|
||||
"""Get MYE entries (engine + trim) for a model+year combo that have parts."""
|
||||
"""Get MYE entries (engine + trim) for a model+year combo."""
|
||||
cur = master_conn.cursor()
|
||||
cur.execute("""
|
||||
SELECT mye.id_mye, e.name_engine, mye.trim_level
|
||||
FROM model_year_engine mye
|
||||
JOIN engines e ON e.id_engine = mye.engine_id
|
||||
WHERE mye.model_id = %s AND mye.year_id = %s
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM vehicle_parts vp
|
||||
WHERE vp.model_year_engine_id = mye.id_mye
|
||||
LIMIT 1
|
||||
)
|
||||
ORDER BY e.name_engine, mye.trim_level
|
||||
""", (model_id, year_id))
|
||||
rows = cur.fetchall()
|
||||
|
||||
Reference in New Issue
Block a user