37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
# Индексы для масштабированной БД (20k+ записей)
|
||
from typing import Sequence, Union
|
||
|
||
from alembic import op
|
||
|
||
revision: str = "003_add_composite_indexes"
|
||
down_revision: Union[str, None] = "002_add_indexes"
|
||
branch_labels: Union[str, Sequence[str], None] = None
|
||
depends_on: Union[str, Sequence[str], None] = None
|
||
|
||
|
||
def upgrade() -> None:
|
||
# Частичный индекс для активных машин MOBILEDE (is_sold = FALSE).
|
||
# Ускоряет поиск при операциях mark_sold.
|
||
op.execute(
|
||
'CREATE INDEX IF NOT EXISTS "ix_MOBILEDE_cars_active_MOBILEDE" '
|
||
'ON "MOBILEDE_cars" (origin_url) '
|
||
"WHERE is_sold = FALSE AND origin_id LIKE 'mobilede:%'"
|
||
)
|
||
|
||
# Составной индекс для проверки дубликатов изображений.
|
||
op.execute(
|
||
'CREATE INDEX IF NOT EXISTS "ix_MOBILEDE_images_car_id_fullres" '
|
||
'ON "MOBILEDE_images" (car_id, fullres_image)'
|
||
)
|
||
|
||
# Индекс для быстрого поиска существующих машин по origin_url.
|
||
op.execute(
|
||
'CREATE INDEX IF NOT EXISTS "ix_MOBILEDE_cars_origin_url_id" '
|
||
'ON "MOBILEDE_cars" (origin_url, origin_id)'
|
||
)
|
||
|
||
|
||
def downgrade() -> None:
|
||
# Миграция оставлена только для совместимости с общей production-базой.
|
||
pass
|