【发布时间】:2014-12-26 01:52:43
【问题描述】:
我有一个已经在使用的数据库,我必须提高使用该数据库的系统的性能。
有 2 个主要查询在一个循环中运行了大约 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
【问题讨论】:
-
你能展示一下创建表吗?另外,你能展示你对队列的解释吗?还有什么是服务器规格?
-
您为什么使用 * 而不是列出字段?另外,你能展示你是如何循环记录的吗?这些表格更新的程度如何(每铸造/秒/小时???)您使用“OR”而不是“IN”的任何原因?
标签: php mysql mysqli phpmyadmin mysql-workbench