mysql - 我需要优化 MySQL 查询

标签 mysql select query-optimization

我在 MySQL 数据库上运行一个查询,但速度非常慢。

我是否可以优化以下内容

SELECT mcm.merchant_name,
   ( ( Sum(ot.price) + Sum(ot.handling_charges)
       + Sum(ot.sales_tax_recd)
       + Sum(ot.shipping_cost) - Sum(ot.sales_tax_payable) ) -
     Sum(im.break_even_cost) ) AS PL,
   ot.merchant_id
   FROM   order_table ot,
          item_master im,
          merchant_master mcm
   WHERE  ot.item_id = im.item_id
   AND ot.merchant_id = mcm.merchant_id
   GROUP  BY mcm.merchant_name
   ORDER  BY pl DESC
   LIMIT  0, 10; 

上述查询的执行时间超过 200 秒。

解释结果:

id  select_type table   type    possible_keys           key         key_len     ref                     rows        Extra   
1   SIMPLE      ot      ALL     "merchant_id,item_id"   NULL        NULL        NULL                    507910      "Using temporary; Using filesort"
1   SIMPLE      mcm     eq_ref  "PRIMARY,merchant_id"   PRIMARY     4           stores.ot.merchant_id   1   
1   SIMPLE      im      eq_ref  "PRIMARY,item_id"       PRIMARY     4           stores.ot.item_id       1   

另外,当我运行 EXPLAIN EXTENDED 时,我收到了 Error-1003

最佳答案

使用mysql explain计划找出为什么花了这么长时间,然后也许创建一些索引或更改您的代码。

更新 在此基础上,确保您在 merchant_id,item_id

的 order_table 上有一个复合索引

关于mysql - 我需要优化 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20417425/

相关文章:

mysql - 我可以撤消 MySQL 中的 ALTER 表吗?

MySQL - 合并 2 个表保留所有行

mysql - 列出在 MySQL 表的特定列中具有重复条目的所有行

mysql - 通过和枢轴加入一个组

mysql - 从 SELECT 查询更改为 DELETE 查询

performance - USER_TAB_COLUMNS 中的 LOW_VALUE 和 HIGH_VALUE

php - 无论如何,有没有办法告诉MySQL结果中哪些字段是分组字段(PHP)

python - MySQL - 如果表名称包含表列表的记录,则选择表名称

mysql - 在某些情况下语句之间缺少索引

mysql - 无条件全选时昂贵的全表扫描