我的数据库(MySQL)中有一个包含数百万数据的巨大表。我需要填充10个随机数据并在UI上显示它。考虑到性能,什么是好方法?
我正在考虑创建MySQL View以填充10个随机行并从UI中读取它。还是有其他有效的方法来处理这种情况吗?
答案 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)
关于表现我认为你必须计时,希望这会有所帮助。