Python django如何优化sql语句?
我的代码: 我使用django ormPython django如何优化sql语句?,python,mysql,django,Python,Mysql,Django,我的代码: 我使用django orm dynasty_li = ["USA", 'US', 'JPN'] data={} for dynasty in dynasty_li: data[dynasty]=People.objects.filter(dynasty=dynasty).order_by("-create_time")[:100] 如果使用sql dynasty_li = ["USA", 'US', 'JPN']
dynasty_li = ["USA", 'US', 'JPN']
data={}
for dynasty in dynasty_li:
data[dynasty]=People.objects.filter(dynasty=dynasty).order_by("-create_time")[:100]
如果使用sql
dynasty_li = ["USA", 'US', 'JPN']
data={}
for dynasty in dynasty_li:
sql="select * from people group by dynast='{dynast}' order by create_time DESC"
data[dynasty]=query(sql)
我认为应该分组,但不可能根据每个王朝从底部提取顶部N
我改进了我的sql语句
SELECT a.id,a.name,a.dynasty,a.create_time FROM people a
left OUTER join people b
on (a.dynasty=b.dynasty and a.id<b.id)
GROUP BY a.id
HAVING count(*)<4
ORDER BY dynasty,create_time
选择a.id、a.name、a.devention、a.create\u time FROM people a
左外接人b
在(a.degent=b.degent和a.id上,目标是什么?国家代码列表发生了什么变化?您希望输出中有多少行?3行还是10行
也许你想要:
SELECT a.id,a.name,a.dynasty,a.create_time
FROM people a
WHERE ( SELECT COUNT(*) FROM people b
WHERE b.dynasty = a.dynasty
AND b.id > a.id
) > 4
ORDER BY a.dynasty, a.create_time
索引:
INDEX(dynasty, id),
INDEX(dynasty, create_time)
如果朝代和人物是不同的模型,则使用朝代模型上的预回迁。否,是相同的模型