Python / Django: получение случайных статей из огромного стола - PullRequest
4 голосов
/ 03 ноября 2010

У меня есть огромная таблица в моей базе данных (MySQL) с миллионами данных.Мне нужно заполнить 10 случайных данных и показать их в пользовательском интерфейсе.Что было бы хорошим подходом с точки зрения производительности?

Я думал о создании MySQL View, чтобы заполнить 10 случайных строк и прочитать их из пользовательского интерфейса.Или есть другой эффективный способ справиться с этой ситуацией?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Это может быть дорого и медленно, но:

MyModel.objects.order_by('?')[:10]

Основными преимуществами являются ясность и то, что это не необработанный SQL.

2 голосов
/ 03 ноября 2010

Прежде всего (это мое правильное мнение), я против использования сырого SQL, когда мы уже работаем с средой высокого уровня, такой как Django, если только мы не найдем то, что ищем в среде (Django), поэтому я скорее буду использовать Django для этого вопроса:

отметьте, что этот подход работает только в том случае, если вы установили автоматическое увеличение для вашего ПК и, конечно, если ваши данные согласованы (вы не удаляете записи из таблицы, чтобы быть уверенными, что все идентификаторы автоматически увеличиваются) 1003 *

 import random

 # Getting the number of rows in the table it's equivalent to do SELECT COUNT(*).
 count_record = Table.objects.count() 

 # Choose 10 (at most) number from the list of all ids. 
 random_pks = random.sample(range(1, count_record) , min(count_record, 10))

 random_list = Table.objects.filter(pk__in=random_pks)

если условие, указанное выше, не выполняется, я думаю, что вы можете сделать это с помощью необработанного SQL-запроса, подобного этому:

query = """SELECT * FROM table
ORDER BY RAND()
LIMIT 10""")

table.objects.raw(query)

о производительности, я думаю, вам нужно время, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...