我的查询花了很长时间来处理“发送数据”中的问题。
SELECT items.defindex,items.name,items.image_url,price.median as price,user_items.id ,user_items.item_id,user_items.original_id
FROM user_items
INNER JOIN items ON user_items.defindex=items.defindex
LEFT JOIN price ON user_items.defindex=price.defindex && user_items.quality=price.quality
WHERE user_items.user_id=6 && user_items.flag_cannot_trade=0 && price.price>=0 && items.price<=40 && items.banned=0
ORDER by price.median desc
以下是解释输出
所有三个表的索引 如果需要,我会提供更多信息
由于
答案 0 :(得分:1)
为所有这些字段创建索引:
user_items.defindex
items.defindex
user_items.defindex
price.defindex
user_items.quality
price.quality
user_items.user_id
user_items.flag_cannot_trade
price.price
items.price
items.banned
price.median
答案 1 :(得分:1)
从可用索引中可以清楚地看到,您缺少处理大数据时需要的索引
您的表格与defindex
列相关联,并且仅在price
首先,在其他两个表上添加索引。
alter table items add index defindex_idx(defindex);
alter table user_items add index defindex_idx(defindex);
现在您拥有where condition
和order by
,以便优化程序扫描需要添加更多索引的较少行数。
alter table user_items add index uid_flag_idx(user_id,flag_cannot_trade);
alter table price add index price_idx(price);
alter table items add index price_idx(price);
alter table items add index banned_idx(banned);
alter table price add index median_idx(median);
确保在应用索引之前备份表。
并在选择部分尝试price.median
。