LLLit: Изучение и практика программирования

Индексирование полей модели Django

Я только знаю, что индексация полезна и быстрее выполняет запросы.

В чем разница между следующими двумя?

1.

class Meta:
       indexes = [
           models.Index(fields=['last_name', 'first_name',]),
           models.Index(fields=['-date_of_birth',]),
]

2.

class Meta:
       indexes = [
            models.Index(fields=['first_name',]),
            models.Index(fields=['last_name',]),
            models.Index(fields=['-date_of_birth',]),
]

Ответы:


1

Пример 1:

В первом примере создается один индекс для полей last_name и first_name.

indexes = [
   models.Index(fields=['last_name', 'first_name',]),
]

Это будет полезно, если вы ищете по фамилии и имени вместе или по фамилии отдельно (поскольку last_name — это первое поле в индексе).

MyModel.objects.filter(last_name=last_name, first_name=first_name)
MyModel.objects.filter(last_name=last_name)

Однако для поиска first_name сам по себе он бесполезен (поскольку first_name не является первым полем в индексе).

MyModel.objects.filter(first_name=first_name)  # not useful

Пример 2:

Во втором примере создается индекс для поля first_name и отдельный индекс для поля last_name.

indexes = [
    models.Index(fields=['first_name',]),
    models.Index(fields=['last_name',]),
]

Это будет полезно, если вы выполняете поиск по имени или фамилии в своем коде.

MyModel.objects.filter(first_name=search)
MyModel.objects.filter(last_name=search)
26.07.2017

2

Индекс модели Django был представлен в Django 1.11.

что такое Model.indexes:

По умолчанию индексы создаются в порядке возрастания для каждого столбца. Чтобы определить индекс с убывающим порядком для столбца, добавьте дефис перед именем поля.

Для вашего запроса models.Index(fields=['last_name', 'first_name','-date_of_birth',]), создаст SQL с (last_name, first_name, date_of_birth DESC).

Давайте перейдем к вашему вопросу.

вы спросили разницу между двумя запросами,

оба возьмут models.Index(fields=['-date_of_birth',]),

потому что хотя бы одна переопределит назначенные переменные. из вашего вопроса наименьшее значение равно dateofbirth, поэтому оно будет переопределять две строки выше.

поэтому в соответствии с документацией предпочтительнее метод, потому что поле индексирования должно быть в одном списке.. поэтому django подготовит индексирование SQL из списка полей...

models.Index(fields=['last_name', 'first_name', '-date_of_birth']),
26.07.2017
  • Ваше предложение создаст единый индекс - это будет бесполезно, если ОП хочет запросить только имя или дату рождения. 26.07.2017
  • Имеет ли смысл индексировать поле ID? 30.07.2020
  • @ alias51, в зависимости от используемой вами БД, это делается автоматически для любого поля, для которого primary_key = True. Если вы используете «авто» Django, PostgreSQL сделает это за вас автоматически — если вы, например, переопределите «id» полем uuid и укажете, если атрибут primary_key=True, это также будет сделано автоматически. 02.01.2021
  • Новые материалы

    Как развивается смешанно-целочисленное программирование, часть 7
    Унифицированная техника раннего завершения для первично-двойственных алгоритмов в смешанно-целочисленном коническом программировании (arXiv) Автор : Ювэнь Чэнь , Кэтрин Нин , Поль Гулар..

    Как научить модель Keras распознавать текст переменной длины
    Я некоторое время играл с официальным примером Keras image_ocr.py и хочу поделиться своими выводами в этом посте. В официальном примере выполняется только обучение модели, но отсутствует..

    Практическая пакетная нормализация
    История начинается после использования инициализации He вместе с ELU (или любым вариантом ReLU) может значительно снизить опасность проблем с исчезающими/взрывающимися градиентами в начале..

    Поэзия онлайн-кодирования: путешествие пикселей и страсти
    В мире, наполненном инновациями, онлайн-обучение программированию становится холстом, на котором обретает форму полотно вашей мечты. Это больше, чем просто создание строк кода; это сродни..

    Обработка изображений с помощью Python - размытие и повышение резкости для начинающих
    Как применить ядра свертки к цветным изображениям? В этой статье мы обсудим, как применять ядра размытия и повышения резкости к изображениям. Эти базовые ядра составляют основу многих более..

    Ограничение скорости в .NET Core 7 Web API
    Что такое ограничение скорости? Ограничение скорости — это процесс, используемый для ограничения количества запросов, разрешенных для определенного ресурса в указанном временном окне. .NET..

    Стабильная Diffusion 1.0 выдаёт более красивые картинки, чем SD 2.1?! Почему?
    Удивительные открытия, которые я сделал недавно. Смотрите в видео: https://youtu.be/PakgD6FewoU Есть одно логичное объяснение — что у вас?