Mysql没有响应我的查询获取

时间:2015-06-24 13:49:23

标签: mysql

我的查询是

select OldCreatorProduct.promekars_madeid, OldCreatorProduct.productIdType, OldCreatorProduct.mekarsId, oldCreatorMaster.mekarsId, OldCreatorProduct.productName, 
LEFT(OldCreatorProduct.promekarDescription, 150) AS 'Short Desc', OldCreatorProduct.promekarDescription, OldCreatorProduct.productMekarPrice, OldCreatorProduct.productAddDateM, oldCategoryMaster.productId 
from beta_icustommadeit.productmekarinfo AS OldCreatorProduct
INNER JOIN beta_icustommadeit.productmaster oldCategoryMaster ON OldCreatorProduct.productIdType=oldCategoryMaster.productId
INNER JOIN beta_icustommadeit.managemekars oldCreatorMaster ON OldCreatorProduct.mekarsId=oldCreatorMaster.mekarsId
INNER JOIN icmi_db.users nk on oldCreatorMaster.mekarsEmail = nk.email_id

1 个答案:

答案 0 :(得分:1)

在查询上运行EXPLAIN以查看执行计划,并验证查询是否使用了合适的索引。

验证连接谓词是否在正确的列上。 (连接的规范模式是从外键列到主键...没有足够的信息让我们知道是否已经完成。)

考虑在WHERE子句中添加其他谓词,以减少查询需要执行的工作量,如果有些行不需要返回。

icmi_db.users未返回任何列。 (连接到该表的目的只是为了消除mekarsEmail不匹配的行?)

无法通过此查询判断您要尝试实现的目标。

要诊断性能问题,请使用 EXPLAIN 查看执行计划。

8.8.1 Optimizing Queries with EXPLAIN https://dev.mysql.com/doc/refman/5.5/en/using-explain.html

确保您有合适的索引

并验证查询是否真的会返回您需要的结果。

其他一些说明:

我们注意到查询返回了两个同名mekarsId的列,可能您想给其中一个别名。

使用反引号字符而不是单引号括起/转义标识符。

就个人而言,我会重新格式化查询以使查询更易于理解,并使EXPLAIN输出更容易使用(更短的表别名)。

 SELECT ocp.promekars_madeid
      , ocp.productIdType
      , ocp.mekarsId                     
      , ocr.mekarsId                      AS `ocr_mekarsId`
      , ocp.productName
      , LEFT(ocp.promekarDescription,150) AS `Short Desc`
      , ocp.promekarDescription
      , ocp.productMekarPrice
      , ocp.productAddDateM
      , ocm.productId
   FROM beta_icustommadeit.productmekarinfo ocp
   JOIN beta_icustommadeit.productmaster ocm 
     ON ocm.productId = ocp.productIdType
   JOIN beta_icustommadeit.managemekars ocr
     ON ocr.mekarsId = ocp.mekarsId
   JOIN icmi_db.users nk
     ON nk.email_id = ocr.mekarsEmail