優化查詢的方式

2021-09-08 04:53:42 字數 2210 閱讀 1901

一、假設有三張表

room

id 1

2..1000user:

id1..

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 room

bk = 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是乙個字段,後面的是乙個字段對應的值

user_id

', request.session['

user_info

']['id'

],))

'booking_date

', booking_date,))

'room_id

', room_id,))

'booking_time

', time_id,))

remove_booking.add(temp, 'or

') #

以or的方式新增到temp

mysql優化查詢的方式

一 假設有三張表 room id 1 2.1000user id1 10000 booking 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...

優化查詢資料慢的方式

mysql資料上限 5000萬 超過效能急劇下降 提公升效率 字段長度 字段型別 sql優化 索引 減少ddl語句 表的修改等 分庫分表 處理資料過大查詢慢 垂直拆分 userid放使用者庫 orderid放訂單庫 存在表效能瓶頸 不易擴充套件 事物處理複雜 不同庫 事物 水平拆分 orderid ...

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...