37 lines
1.2 KiB
Python
37 lines
1.2 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:
|
|
# Partial index для активных машин IAAI (is_sold = FALSE)
|
|
# Ускоряет поиск при mark_sold операциях
|
|
op.execute(
|
|
"CREATE INDEX IF NOT EXISTS ix_iaai_cars_active_iaai "
|
|
"ON iaai_cars (origin_url) "
|
|
"WHERE is_sold = FALSE AND origin_id LIKE 'iaai:%'"
|
|
)
|
|
|
|
# Composite index для проверки дубликатов изображений
|
|
op.execute(
|
|
"CREATE INDEX IF NOT EXISTS ix_iaai_images_car_id_fullres "
|
|
"ON iaai_images (car_id, fullres_image)"
|
|
)
|
|
|
|
# Index для быстрого поиска existing машин по origin_url
|
|
op.execute(
|
|
"CREATE INDEX IF NOT EXISTS ix_iaai_cars_origin_url_id "
|
|
"ON iaai_cars (origin_url, origin_id)"
|
|
)
|
|
|
|
|
|
def downgrade() -> None:
|
|
# Compatibility-only migration for shared production databases.
|
|
pass
|