我的查询需要很长时间才能处理,并且仍处于“发送数据”状态。
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
下面是解释输出
所有三个表的索引 如果需要,我会提供更多信息
谢谢
最佳答案
从可用索引来看,很明显您缺少处理大数据时需要的索引
您的表与 defindex
列连接,并且仅在 price
中建立索引
所以首先在其他两个表上添加索引。
alter table items add index defindex_idx(defindex);
alter table user_items add index defindex_idx(defindex);
现在您有了 where 条件
和 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
。
关于Mysql 查询卡在发送数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29574149/