博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化查询
阅读量:7055 次
发布时间:2019-06-28

本文共 2027 字,大约阅读时间需要 6 分钟。

Room     id    1    2    ..        1000    User:    id    1    ..    10000Booking:    user_id   room_id    time_id       date       1          1                8:00      2017-11-11       1          2                8:00      2017-11-11       1          3                8:00      2017-11-11       1          4                8:00      2017-11-11       1          5                8:00      2017-11-11

二、 需求:获取2017-11-11所有预定信息:

打印:用户名称,会议室名称, 预定时间段

# 解决方案一:执行11次sql语句    bk = models.Booking.objects.filter(date=2017-11-11)for item in bk:    print(item.time_id, item.room.caption, item.user.user)        # 解决方案二:执行1次#select * from ... left join user ... join roombk = models.Booking.objects.filter(date=2017-11-11).select_related('user','room')for item in bk:    print(item.time_id, item.room.caption, item.user.user)    # 解决方案三:执行3次#select * from booking where date=2017-11-11#select * from user where id in [1,]#select * from room where id in [1,2,3,4,5]bk = models.Booking.objects.filter(date=2017-11-11).prefetch_related('user','room')    for item in bk:    print(item.time_id, item.room.caption, item.user.user)
 

 总结:以后对于SQL语句的优化要加上selsect_releated或者prefetch_releated,这只是对于跨表做的优化,如果是单表的话就没有必要进行优化查询了

那么什么时候用selsect_releated,什么时候用prefetch_releated呢?这个按情况而定,

selsect_releated是主动连表,执行一次SQL

prefetch_releated不连表执行3次SQL

二、Q查询的第二种方式

       remove_booking = Q()            for room_id, time_id_list in booking_info['del'].items():                for time_id in time_id_list:                    temp = Q()    #实例化一个Q对象                    temp.connector = 'AND'  #以and的方式连接                    # user_id是一个字段,后面的是一个字段对应的值                    temp.children.append(('user_id', request.session['user_info']['id'],))                       temp.children.append(('booking_date', booking_date,))                    temp.children.append(('room_id', room_id,))                    temp.children.append(('booking_time', time_id,))                    remove_booking.add(temp, 'OR')   #以or的方式添加到temp

转载于:https://www.cnblogs.com/yifugui/p/8034529.html

你可能感兴趣的文章
epoll的作用和原理介绍
查看>>
服务器远程监控管理(一)-硬件篇
查看>>
Android permission 工具类
查看>>
Tomcat使用与配置
查看>>
Fedora 29 Linux发行版发布
查看>>
php ts nts v6 v9的区别
查看>>
飞塔IPSec ××× V4.0系列配置
查看>>
SonicWall如何安全模恢复出厂设置
查看>>
【java 集合类】Array、List、Map区别和联系【详细】
查看>>
我的友情链接
查看>>
Linux上实现双向进程间通信管道(socketpair)
查看>>
2017qq红包雨最强攻略
查看>>
View 5.1 connection server的SSL配置
查看>>
Oracle 扩展表空间的3种方法(SQL语句)
查看>>
myBatis 基础测试 增 删 改 查 用过hibrenate 之后,感觉很好理解
查看>>
puppet之dashboard安装及优化
查看>>
谷歌 V8 JavaScript引擎引入新解释器Ignition,旨在减少内存消耗
查看>>
node实践--node集体管理工具PM2用法简介
查看>>
jsHelper
查看>>
Python成长之路_装饰器
查看>>