我的数据库(MySQL)中有一个巨大的表,其中包含数百万个数据。我需要填充10个随机数据,并在UI上显示它。考虑到性能,什么是一个好的方法?
我在考虑创建MySQL视图来填充10个随机行,并从UI中读取它。或者,有没有其他有效的方法来处理这种情况?
发布于 2010-11-03 08:01:39
首先(这是我的正确观点)我反对在我们已经在使用像Django这样的高级框架时使用原始SQL,除非我们在框架( Django )中找不到我们想要的东西,所以我宁愿使用Django来解决这个问题:
请注意,这种方法只有在您将自动递增设置为您的主键时才有效,当然,如果您的数据是一致的(您不会从表中删除记录,以便您可以确保所有if都是自动递增的)
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)关于性能,我认为你必须对它进行计时,希望这能有所帮助。
发布于 2010-11-03 08:01:55
这可能是昂贵和缓慢的,但是:
MyModel.objects.order_by('?')[:10]它的主要优点是清晰度,而且它不是原始SQL。
https://stackoverflow.com/questions/4083040
复制相似问题