Mysql 查询卡在发送数据中

标签 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 如果需要,我会提供更多信息

谢谢

最佳答案

从可用索引来看,很明显您缺少处理大数据时需要的索引

您的表与 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/

相关文章:

sql表优化: primary and secondary indexes

mysql - 如何在 phpMyAdmin 或其他程序中查看用于创建 View 的原始 MySQL?

php mySQL准备续集,只显示与登录用户的用户ID相关联的结果

php mysql查询连接错误无法选择数据库

PHP:加载相似的结果

database - 手动更改 Entity Framework 数据库会导致错误

sql - 如何为以下结果创建 SQL 语句?

database - 关于排序的优化器统计信息

mysql - 为什么 mysql 在应该返回 null 时返回一些行?

php - 需要设计一个包含大量属性的表,这些属性都必须可以通过 SQL 进行搜索