我有一個已經在使用的數據庫,我必須提高使用此數據庫的系統的性能。如何在不更改數據庫結構的情況下提高Mysql數據庫性能
循環中有兩個主要查詢運行約1000次,並且此查詢每個都有3個其他表的內部連接。這反過來使系統非常慢。
我試着從循環中刪除查詢,並只提取一次所有數據並在PHP中處理它。但是這會給內存(RAM)帶來很多負擔,並且如果有2個或更多的客戶端嘗試使用該系統,系統就會掛起。
即使在刪除過期的數據後,表中仍有大量數據。
我附上了下面的查詢。
任何人都可以幫助我解決這個問題嗎?
select * from inventory
where (region_id = 38 or region_id = -1)
and (tour_opp_id = 410 or tour_opp_id = -1)
and room_plan_id = 141 and meal_plan_id = 1 and bed_type_id = 1 and hotel_id = 1059
and FIND_IN_SET(supplier_code, 'QOA,QTE,QM,TEST,TEST1,MQE1,MQE3,PERR,QKT')
and (('2014-11-14' between from_date and to_date))
order by hotel_id desc ,supplier_code desc, region_id desc,tour_opp_id desc,inventory.inventory_id desc
SELECT * ,pinfo.fri as pi_day_fri,pinfoadd.fri as pa_day_fri,pinfochld.fri as pc_day_fri
FROM `profit_markup`
inner join profit_markup_info as pinfo on pinfo.profit_id = profit_markup.profit_markup_id
inner join profit_markup_add_info as pinfoadd on pinfoadd.profit_id = profit_markup.profit_markup_id
inner join profit_markup_child_info as pinfochld on pinfochld.profit_id = profit_markup.profit_markup_id
where profit_markup.hotel_id = 1059 and (`booking_channel` = 1 or `booking_channel` = 2)
and (`rate_region` = -1 or `rate_region` = 128)
and ((period_from <= '2014-11-14' and period_to >= '2014-11-14'))
ORDER BY profit_markup.hotel_id DESC,supplier_code desc, rate_region desc,operators_list desc, profit_markup_id DESC
你能告訴你顯示創建表嗎?另外,你可以向隊列展示你的解釋嗎?服務器規格又是什麼? – Jaylen 2014-10-30 06:05:02
你爲什麼使用*而不是列出字段?另外,你可以展示你如何循環記錄。這些表如何更新(每小時/每秒/小時?)您使用「OR」而不是「IN」的任何原因? – Jaylen 2014-10-30 06:44:17