1) То, что вы хотите сделать, противоречит тому, как работает Django, и приведет к большей боли, чем оно того стоит. Я бы порекомендовал сделать prefetch_related
как предложено. Вы также можете изучить следующее. Вот документы на ManyToManyField .
class Item(models.Model):
name = models.CharField(max_length=100)
class Group(models.Model):
name = models.CharField(max_length=100)
items = models.ManyToManyField(Group, through='ItemGroup')
class ItemGroup(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
2) Взгляните на ListField
. Я думаю, что это должно помочь вам достичь того, что вы хотите там.
Это - паранойя:)
дБ не увеличиваются в размере излишне, но для проблем производительности пространство не освобождено также.
то, Что Вы услышали по всей вероятности, то, что, если Вы удаляете записи, что пространство не отдано к Операционной системе . Вместо этого это сохранено как вакуум для DB к повторному использованию впоследствии.
Это вызвано тем, что:
, Как Вы видите, расположите с интервалами , снова использованы, но никогда не отданы. Это - ключевой пункт к Вашему вопросу.
В innodb нет практического способа освободить пространство.
Все эти методы становятся непрактичными, когда вы используете огромные таблицы (в моем случае они больше 250 ГБ), и вы должны сохранять их, удаляя записи, чтобы повысить производительность.
Вам придется серьезно подумать, достаточно ли у вас места на жестком диске для выполнения одной из вышеуказанных функций (в моем случае я не думаю, что 1 ТБ достаточно для всех этих действий)
с таблицей Innotab (и самой mysql) опция довольно ограничена, если у нее серьезный размер базы данных.