为什么MySQL Select会永远占用

时间:2013-04-11 14:56:06

标签: mysql sql-server forever

晚上好, 我有这个查询,我无法修复它。它永远不会完成,但它在MSSQL 2000上完成,我想在MySQL上使用它。有什么建议吗?

SELECT T_Coll.Nom_REGION AS Region_Col,
       T_Coll.Nom_STE AS Societe_Col,
       T_Coll.Nom_ETS AS Ets_Col,
       T_Coll.Nom_CDP AS CDP_Col,
       T_Coll.ID_Coll,
       T_Coll.NomColl AS NomColl,
       T_Coll.Nom_Coll AS NOM,
       T_Coll.Prenom_Coll AS Prenom,
       T_Coll.Trig_Coll,
       T_Coll.EXTERN,
       T_DETAIL.AN,
       T_DETAIL.Mois_Modif,
       T_DETAIL.T_AFFAIRE_ID,
       T_DETAIL.T_LOT_ID,
       T_DETAIL.T_SOUS_LOT_ID,
       T_Type.NomType,
       T_DETAIL.AUTRE_LIBELLE,
       T_DETAIL.JOUR01 + T_DETAIL.JOUR02 + T_DETAIL.JOUR03 + T_DETAIL.JOUR04 + T_DETAIL.JOUR05 + T_DETAIL.JOUR06 + T_DETAIL.JOUR07 + T_DETAIL.JOUR08 + T_DETAIL.JOUR09 + T_DETAIL.JOUR10 + T_DETAIL.JOUR11 + T_DETAIL.JOUR12 + T_DETAIL.JOUR13 + T_DETAIL.JOUR14 + T_DETAIL.JOUR15 + T_DETAIL.JOUR16 + T_DETAIL.JOUR17 + T_DETAIL.JOUR18 + T_DETAIL.JOUR19 + T_DETAIL.JOUR20 + T_DETAIL.JOUR21 + T_DETAIL.JOUR22 + T_DETAIL.JOUR23 + T_DETAIL.JOUR24 + T_DETAIL.JOUR25 + T_DETAIL.JOUR26 + T_DETAIL.JOUR27 + T_DETAIL.JOUR28 + T_DETAIL.JOUR29 + T_DETAIL.JOUR30 + T_DETAIL.JOUR31 AS Total_Jours,
       T_DETAIL.JOUR01 + T_DETAIL.JOUR02 + T_DETAIL.JOUR03 + T_DETAIL.JOUR04 + T_DETAIL.JOUR05 + T_DETAIL.JOUR06 + T_DETAIL.JOUR07 + T_DETAIL.JOUR08 + T_DETAIL.JOUR09 + T_DETAIL.JOUR10 + T_DETAIL.JOUR11 + T_DETAIL.JOUR12 + T_DETAIL.JOUR13 + T_DETAIL.JOUR14 + T_DETAIL.JOUR15 + T_DETAIL.JOUR16 + T_DETAIL.JOUR17 + T_DETAIL.JOUR18 + T_DETAIL.JOUR19 + T_DETAIL.JOUR20 + T_DETAIL.JOUR21 + T_DETAIL.JOUR22 + T_DETAIL.JOUR23 + T_DETAIL.JOUR24 + T_DETAIL.JOUR25 + T_DETAIL.JOUR26 + T_DETAIL.JOUR27 + T_DETAIL.JOUR28 + T_DETAIL.JOUR29 + T_DETAIL.JOUR30 + T_DETAIL.JOUR31 + T_DETAIL.REGUL AS Total_Jours_et_Reg,
       T_DETAIL.REGUL,
       T_Cam.ID AS ID_Cram,
       T_Cam.STATUT,
       T_Cam.T_COLLABORATEUR_ID AS ID_Cram_Coll,
       T_DETAIL.ID AS ID_Cram_Detail,
       T_DETAIL.MOIS,
       T_DETAIL.JOUR01,
       T_DETAIL.JOUR02,
       T_DETAIL.JOUR03,
       T_DETAIL.JOUR04,
       T_DETAIL.JOUR05,
       T_DETAIL.JOUR06,
       T_DETAIL.JOUR07,
       T_DETAIL.JOUR08,
       T_DETAIL.JOUR09,
       T_DETAIL.JOUR10,
       T_DETAIL.JOUR11,
       T_DETAIL.JOUR12,
       T_DETAIL.JOUR13,
       T_DETAIL.JOUR14,
       T_DETAIL.JOUR15,
       T_DETAIL.JOUR16,
       T_DETAIL.JOUR17,
       T_DETAIL.JOUR18,
       T_DETAIL.JOUR19,
       T_DETAIL.JOUR20,
       T_DETAIL.JOUR21,
       T_DETAIL.JOUR22,
       T_DETAIL.JOUR23,
       T_DETAIL.JOUR24,
       T_DETAIL.JOUR25,
       T_DETAIL.JOUR26,
       T_DETAIL.JOUR27,
       T_DETAIL.JOUR28,
       T_DETAIL.JOUR29,
       T_DETAIL.JOUR30,
       T_DETAIL.JOUR31,
       T_Supr.Suppression,
       T_Coll.TYPE
FROM T_Coll
INNER JOIN T_Cam ON  T_Cam.T_COLLABORATEUR_ID = T_Coll.ID_Coll
INNER JOIN T_DETAIL ON  T_DETAIL.T_Cam_ID = T_Cam.ID
INNER JOIN T_Type ON T_Type.TYPE = T_DETAIL.TYPE 
LEFT OUTER JOIN T_Supr ON T_Supr.ID_Cram_Detail = T_DETAIL.ID

WHERE (T_Supr.Suppression IS NULL)

ORDER BY T_Coll.NomColl,
         T_DETAIL.AN,
         T_DETAIL.Mois_Modif,
         T_DETAIL.T_AFFAIRE_ID,
         T_DETAIL.T_LOT_ID,
         T_DETAIL.T_SOUS_LOT_ID

我无法在MySQL下完成这项工作!

提前致谢!

1 个答案:

答案 0 :(得分:1)

连接,where子句和order by中使用的所有列都应该被编入索引。没有索引,你不能指望在任何数据库中有任何好的性能。您的查询没有什么非常复杂的,所以这是最可能的问题。

不要退回任何您不需要的列。例如,为什么在根据where子句值始终为nulll时返回T_Supr.Suppression?

在mysql中,您应该查看解释计划,以查看问题在慢查询中的位置。在SQL Server中查看Execution PLan。您需要学习如何阅读这些内容以便在SQL中进行有效编程。