mysql惰性查询,缓存数据

本文探讨了MySQL的惰性查询特性,通过示例展示了如何在默认情况下仅查询前21条数据。同时,文章介绍了缓存数据的概念,并通过再次打印缓存的stus数据来说明缓存机制,检查底层SQL发现并未再次执行查询,从而揭示了数据库的效率提升策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看底层SQL

def showsql():
    from django.db import connection
    print connection.queries[-1]['sql']

惰性查询

  • 延迟查询
  • 默认查询前21条数据
  • 什么时候需要数据进行查询

from student.models import *
stus = Stu.objects.all()
def showsql():
from django.db import connection
print connection.queries[-1][‘sql’]

showsql()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 3, in showsql
IndexError: list index out of range

Stu.objects.all()
<QuerySet [<Stu: Stu:zhangsan,88>, <Stu: Stu:lisi,90>, <Stu: Stu:wangwu,99>, <Stu: Stu:zhangjie,76>, <Stu: Stu:xiena,99>]>
showsql()
SELECT `t_stu`.`sno`, `t_stu`.`sname`, `t_stu`.`score`, `t_stu`.`created`, `t_stu`.`clazz_id` FROM `t_stu` LIMIT 21

缓存数据

from student.models import *
from django.db import connection

Stu.objects.get(sno=1)
<Stu: Stu:zhangsan,88>

Stu.objects.get(sno=2)
<Stu: Stu:lisi,90>

stus = Stu.objects.all()
for s in stus:
    print s
Stu:zhangsan,88
Stu:lisi,90
Stu:wangwu,99
Stu:zhangjie,76
Stu:xiena,99

print connection.queries[-1]['sql']
SELECT `t_stu`.`sno`, `t_stu`.`sname`, `t_stu`.`score`, `t_stu`.`created`, `t_stu`.`clazz_id` FROM `t_stu`

print connection.queries[-2]['sql']
SELECT `t_stu`.`sno`, `t_stu`.`sname`, `t_stu`.`score`, `t_stu`.`created`, `t_stu`.`clazz_id` FROM `t_stu` WHERE `t_stu`.`sno` = 2

print connection.queries[-3]['sql']
SELECT `t_stu`.`sno`, `t_stu`.`sname`, `t_stu`.`score`, `t_stu`.`created`, `t_stu`.`clazz_id` FROM `t_stu` WHERE `t_stu`.`sno` = 1
再次打印缓存的stus数据
检查底层SQL发现没有再次执行SQL
print stus
<QuerySet [<Stu: Stu:zhangsan,88>, <Stu: Stu:lisi,90>, <Stu: Stu:wangwu,99>, <Stu: Stu:zhangjie,76>, <Stu: Stu:xiena,99>]>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值