В БД есть таблички:
BlogRecord - кол-во записей более 30 000.
Comment - кол-во записей более 250 000.
Всё реализовано на Django, модели имеют примерно следующий вид:
class BlogRecord(models.Model):
text = models.TextField(null=True, blank=True)
# прочие поля
class Comment(models.Model):
blog_record = models.ForeignKey(BlogRecord, db_index=True)
# прочие поля
Сначала делается выборки из таблицы комментариев, в выборку может попасть более 150к записей, далее нужно получить список записей в блоге из этой выборки. Проблема в том, что такой запрос выполняется непозволительно долго - более 30 сек, хотелось бы уменьшить это время секунд до 1-2.
Изначально выборку делал так:
# сложная выборка по разным полям из таблицы комментариев
comments = models.Comment.objects.filter()
blog_record = models.BlogRecord.objects.filter(
id__in=comments.values_list('blog_record')
)
Потом пробовал перенести часть вычислений в код python, но лучше не стало.
comment_ids = # Большой список ID комментариев полученный в результате выборки.
models.BlogRecord.objects.filter(id__in=comment_ids)
Может есть какие ещё методы, может изменить что-то в структуре БД?
P.S. В django не очень силен, возможно что-то делаю не так.