mysql查询锁定所有内容

mysql查询锁定所有内容,mysql,Mysql,用户有一个查询,该查询在运行时会锁定数据库中的所有其他内容。 我运行了一个配置文件,它返回了很多记录,但不知道如何处理它。 有人能更有效地编写代码吗?它运行了很长一段时间 SELECT CLAIMS.LINE_GROUPING1 ,CLAIMS.LOSS_DATE ,(CASE WHEN CLAIMS.POLICY_STATE=14 THEN 'IA' WHEN CLAIMS.POLICY_STATE=12 THEN 'IL' WHEN CLAIMS.POLICY_STATE=22 T

用户有一个查询,该查询在运行时会锁定数据库中的所有其他内容。 我运行了一个配置文件,它返回了很多记录,但不知道如何处理它。 有人能更有效地编写代码吗?它运行了很长一段时间

SELECT

CLAIMS.LINE_GROUPING1

,CLAIMS.LOSS_DATE

,(CASE WHEN CLAIMS.POLICY_STATE=14 THEN 'IA'

WHEN CLAIMS.POLICY_STATE=12 THEN 'IL'

WHEN CLAIMS.POLICY_STATE=22 THEN 'MN'

WHEN CLAIMS.POLICY_STATE=26 THEN 'NE'

WHEN CLAIMS.POLICY_STATE=40 THEN 'SD'

WHEN CLAIMS.POLICY_STATE=48 THEN 'WI'

ELSE 'NA' END) AS POLICY_STATE

,CLAIMS.CLAIM_ZIPCODE

,CLAIMS.DIRECT_CASE_INC

,CLAIMS.OCC_CNT

,CLAIMS.DIRECT_CASE_INC*

(CASE WHEN CLAIMS.ACCIDENT_YEAR  IN(2013)

      THEN 1.00

  WHEN CLAIMS.LINE_GROUPING1='PERSONAL AUTO' AND CLAIMS.ACCIDENT_YEAR < 2013

      THEN COALESCE(COALESCE(TREND.TREND,AUTO_AVG.AVG_TREND),1.00)

  WHEN CLAIMS.LINE_GROUPING1='HOMEOWNERS' AND CLAIMS.ACCIDENT_YEAR BETWEEN 2007 AND (2013-1)

      THEN COALESCE(COALESCE(TREND.TREND,HOME_AVG.AVG_TREND),1.00)

  WHEN CLAIMS.LINE_GROUPING1='HOMEOWNERS' AND CLAIMS.ACCIDENT_YEAR =2006

      THEN COALESCE(COALESCE(TREND_HOME_2007.TREND,HOME_AVG_2007.AVG_TREND),1.00)

  ELSE 1.00 END)

AS EXP_ADJ_CASE_INC



 FROM mva.CLAIMS_STORM_LOSSES_TEMP AS CLAIMS

   LEFT OUTER JOIN mva.CLAIMS_Exposures_Trending AS TREND

 ON CLAIMS.LINE_GROUPING1 = TREND.LINE_GROUPING1

  AND CLAIMS.ACCIDENT_YEAR = TREND.ACCIDENT_YEAR

 AND CLAIMS.POLICY_STATE = TREND.STATE

AND CLAIMS.CLAIM_ZIPCODE = TREND.ZIPCODE

LEFT OUTER JOIN mva.CLAIMS_Exposures_Trending AS TREND_HOME_2007 #DONT HAVE A 2006 TREND FACTOR

ON CLAIMS.LINE_GROUPING1 = TREND_HOME_2007.LINE_GROUPING1

AND TREND_HOME_2007.ACCIDENT_YEAR=2007

AND CLAIMS.POLICY_STATE = TREND_HOME_2007.STATE

AND CLAIMS.CLAIM_ZIPCODE = TREND_HOME_2007.ZIPCODE  

LEFT OUTER JOIN mva.CLAIMS_Exposures_Auto_AVG_TREND AS AUTO_AVG

ON AUTO_AVG.ACCIDENT_YEAR = CLAIMS.ACCIDENT_YEAR

AND AUTO_AVG.STATE = CLAIMS.POLICY_STATE

LEFT OUTER JOIN mva.CLAIMS_Exposures_Home_AVG_TREND AS HOME_AVG

ON HOME_AVG.STATE = CLAIMS.POLICY_STATE

AND HOME_AVG.ACCIDENT_YEAR = CLAIMS.ACCIDENT_YEAR

LEFT OUTER JOIN mva.CLAIMS_Exposures_Home_AVG_TREND AS HOME_AVG_2007 #DONT HAVE A 2006   TREND FACTOR

ON HOME_AVG_2007.STATE = CLAIMS.POLICY_STATE

AND HOME_AVG_2007.ACCIDENT_YEAR = CLAIMS.ACCIDENT_YEAR

AND HOME_AVG_2007.ACCIDENT_YEAR=2007;
使用InnoDB数据库引擎 使用Explain查询检查是否使用了索引。适当的索引将大大加快查询速度,因此不会长时间锁定。
如果不知道所有这些表中有什么,所有这些连接,以及它需要经过多少数据,那么很难检查为什么要运行这么长时间。有些查询只需要运行几秒钟到几分钟甚至几小时。在确保高效查询的同时,无法保证它会在几秒钟内运行。如果你有大量的数据,这是不可避免的。几年前我在一家银行工作,有些查询只需要几个小时就可以运行。每次发布广告时,这个查询是否都由用户运行?我认为程序是处理复杂逻辑的方法。