Python / Django:从大表中获取随机文章

时间:2010-11-02 23:34:03

标签: python mysql django

我的数据库(MySQL)中有一个包含数百万数据的巨大表。我需要填充10个随机数据并在UI上显示它。考虑到性能,什么是好方法?

我正在考虑创建MySQL View以填充10个随机行并从UI中读取它。还是有其他有效的方法来处理这种情况吗?

2 个答案:

答案 0 :(得分:3)

这可能既昂贵又缓慢,但是:

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

主要优点是清晰度,而不是原始SQL。

答案 1 :(得分:2)

首先(这是我的正确观点)当我们已经在使用像Django这样的高级框架时,我反对使用原始SQL,除非我们在框架中找不到我们想要的东西(Django),所以我宁愿在这件事上使用Django:

注意这种方法只有在你为PK设置自动增量时才有效,当然如果你的数据是一致的(你没有从表中删除记录,这样你可以确保所有id都自动增加)< / p>

 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)

关于表现我认为你必须计时,希望这会有所帮助。