这种情况:2个表,一个包含项目列表,另一个包含对这些项目进行的出价列表。现在我需要知道与实际价格的项目的细节。换句话说,如果已经进行了投标,我需要知道该项目的投标清单中的最高价值以获得当前价格。在有些情况下还会有适用于过滤下来的项目数量的其他规则的情况,但基本上可以归结为:加快子查询和MAX值左连接的mysql查询
SELECT i . * , IFNULL(GREATEST(b.`made_bid` , `start_bid`) , `start_bid`) AS current_price
FROM `items` i
LEFT JOIN (
SELECT `bid_list`.`item_id` , MAX(`made_bid`) AS made_bid
FROM `bid_list`
WHERE (
bid_status =1
)
GROUP BY `item_id`
)b ON b.item_id = i.id
这里是我的问题:这工作,但它的速度慢和减缓的越来越多的项目被输入到数据库中,越来越多的出价被制作出来,所以bid_list也在增长。
有没有更好的方法来编写此查询,或者最好的课程是将当前最高出价输入到项目表的额外列中,并在每次出价时更新它?不过某种程度上,这感觉不对,因为我会两次备份相同的信息。
任何与此有关的帮助将不胜感激。
PS,结果的解释道:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY i ALL NULL NULL NULL NULL 839
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 507
2 DERIVED bid_list index status item_id 4 NULL 5726 Using where
PPS的bid_list的指标:
PRIMARY BTREE Yes No id 5367 A
item_id BTREE No No item_id 1073 A
user_id BTREE No No user_id 894 A
status BTREE No No bid_status 1 A YES
made_bid_per_item BTREE No No status 5 A YES
item_id 1073 A
amount 5367 A
你有没有索引?你可以发布EXPLAIN的输出吗? – 2012-07-31 14:39:06
当然,这里是 – Peter 2012-07-31 14:40:37
你可以发布它的方式,它的可读性?尝试编辑您的问题。 – 2012-07-31 14:41:21