Mysql查询卡在发送数据中

时间:2015-04-11 04:33:05

标签: mysql database

我的查询花了很长时间来处理“发送数据”中的问题。

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

以下是解释输出

enter image description here

所有三个表的索引 enter image description here 如果需要,我会提供更多信息

由于

2 个答案:

答案 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 conditionorder 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