在每个更新序列之后更新表中的行需要很长时间?

时间:2017-06-06 11:16:43

标签: mysql database-performance database-partitioning

这是我的表

CREATE TABLE `fa_nls_og` (
    `Incr_Dollar_YAG_pct_Chg` double(50,4) DEFAULT NULL,
    `Incr_U_YAG_pct_Chg` double(50,4) DEFAULT NULL,
    `Incr_U_YAG_Chg` double(50,4) DEFAULT NULL,
    `Incr_EQ_YAG_pct_Chg` double(50,4) DEFAULT NULL,
    `Incr_EQ_YAG_Chg` double(50,4) DEFAULT NULL,
    `Baseline_EQ_YAG_pct_Chg` double(50,4) DEFAULT NULL,
    `Baseline_EQ_YAG_Chg` double(50,4) DEFAULT NULL,
    `Baseline_Units_YAG_pct_Chg` double(50,4) DEFAULT NULL,
    `Baseline_Units_YAG_Chg` double(50,4) DEFAULT NULL,
    `Units_YAG_Period` double(50,4) DEFAULT NULL,
    `Units_YAG_pct_Chg` double(50,4) DEFAULT NULL,
    `Units_YAG_Chg` double(50,4) DEFAULT NULL, 
    `PERIOD_YEAR` int(50) DEFAULT NULL,
    `CAT_NO` int(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
    /*!50100 PARTITION BY RANGE (PERIOD_YEAR)
    SUBPARTITION BY KEY (CAT_NO) SUBPARTITIONS 12
   (PARTITION pytd VALUES LESS THAN (2) ENGINE = InnoDB, 
    PARTITION p VALUES LESS THAN (200000) ENGINE = InnoDB, 
    PARTITION p0 VALUES LESS THAN (201401) ENGINE = InnoDB, 
    PARTITION p2 VALUES LESS THAN (201402) ENGINE = InnoDB, 
    PARTITION p4 VALUES LESS THAN (201403) ENGINE = InnoDB, 
    PARTITION p6 VALUES LESS THAN (201404) ENGINE = InnoDB, 
    PARTITION p8 VALUES LESS THAN (201405) ENGINE = InnoDB, 
    PARTITION p10 VALUES LESS THAN (201406) ENGINE = InnoDB, 
    PARTITION p12 VALUES LESS THAN (201407) ENGINE = InnoDB, 
    PARTITION p14 VALUES LESS THAN (201408) ENGINE = InnoDB, 
    PARTITION p16 VALUES LESS THAN (201409) ENGINE = InnoDB, 
    PARTITION p18 VALUES LESS THAN (201410) ENGINE = InnoDB, 
    PARTITION p20 VALUES LESS THAN (201411) ENGINE = InnoDB, 
    PARTITION p22 VALUES LESS THAN (201412) ENGINE = InnoDB, 
    PARTITION p24 VALUES LESS THAN (201501) ENGINE = InnoDB, 
    PARTITION p26 VALUES LESS THAN (201502) ENGINE = InnoDB, 
    PARTITION p28 VALUES LESS THAN (201503) ENGINE = InnoDB, 
    PARTITION p30 VALUES LESS THAN (201504) ENGINE = InnoDB, 
    PARTITION p32 VALUES LESS THAN (201505) ENGINE = InnoDB, 
    PARTITION p34 VALUES LESS THAN (201506) ENGINE = InnoDB, 
    PARTITION p36 VALUES LESS THAN (201507) ENGINE = InnoDB, 
    PARTITION p38 VALUES LESS THAN (201508) ENGINE = InnoDB, 
    PARTITION p40 VALUES LESS THAN (201509) ENGINE = InnoDB, 
    PARTITION p42 VALUES LESS THAN (201510) ENGINE = InnoDB, 
    PARTITION p44 VALUES LESS THAN (201511) ENGINE = InnoDB, 
    PARTITION p46 VALUES LESS THAN (201512) ENGINE = InnoDB, 
    PARTITION p48 VALUES LESS THAN (201601) ENGINE = InnoDB, 
    PARTITION p50 VALUES LESS THAN (201602) ENGINE = InnoDB, 
    PARTITION p52 VALUES LESS THAN (201603) ENGINE = InnoDB, 
    PARTITION p54 VALUES LESS THAN (201604) ENGINE = InnoDB, 
    PARTITION p56 VALUES LESS THAN (201605) ENGINE = InnoDB, 
    PARTITION p58 VALUES LESS THAN (201606) ENGINE = InnoDB, 
    PARTITION p60 VALUES LESS THAN (201607) ENGINE = InnoDB, 
    PARTITION p62 VALUES LESS THAN (201608) ENGINE = InnoDB, 
    PARTITION p64 VALUES LESS THAN (201609) ENGINE = InnoDB, 
    PARTITION p66 VALUES LESS THAN (201610) ENGINE = InnoDB, 
    PARTITION p68 VALUES LESS THAN (201611) ENGINE = InnoDB, 
    PARTITION p70 VALUES LESS THAN (201612) ENGINE = InnoDB, 
    PARTITION p72 VALUES LESS THAN (201701) ENGINE = InnoDB, 
    PARTITION p74 VALUES LESS THAN (201702) ENGINE = InnoDB, 
    PARTITION p76 VALUES LESS THAN (201703) ENGINE = InnoDB, 
    PARTITION p78 VALUES LESS THAN (201704) ENGINE = InnoDB, 
    PARTITION p80 VALUES LESS THAN (201705) ENGINE = InnoDB, 
    PARTITION p82 VALUES LESS THAN (201706) ENGINE = InnoDB, 
    PARTITION p84 VALUES LESS THAN (201707) ENGINE = InnoDB, 
    PARTITION p86 VALUES LESS THAN (201708) ENGINE = InnoDB, 
    PARTITION p88 VALUES LESS THAN (201709) ENGINE = InnoDB, 
    PARTITION p90 VALUES LESS THAN (201710) ENGINE = InnoDB, 
    PARTITION p92 VALUES LESS THAN (201711) ENGINE = InnoDB, 
    PARTITION p94 VALUES LESS THAN (201712) ENGINE = InnoDB, 
    PARTITION p96 VALUES LESS THAN (201801) ENGINE = InnoDB, 
    PARTITION p98 VALUES LESS THAN (201802) ENGINE = InnoDB, 
    PARTITION p100 VALUES LESS THAN (201803) ENGINE = InnoDB, 
    PARTITION p102 VALUES LESS THAN (201804) ENGINE = InnoDB, 
    PARTITION p104 VALUES LESS THAN (201805) ENGINE = InnoDB, 
    PARTITION p106 VALUES LESS THAN (201806) ENGINE = InnoDB, 
    PARTITION p108 VALUES LESS THAN (201807) ENGINE = InnoDB, 
    PARTITION p110 VALUES LESS THAN (201808) ENGINE = InnoDB, 
    PARTITION p112 VALUES LESS THAN (201809) ENGINE = InnoDB, 
    PARTITION p114 VALUES LESS THAN (201810) ENGINE = InnoDB, 
    PARTITION p116 VALUES LESS THAN (201811) ENGINE = InnoDB, 
    PARTITION p118 VALUES LESS THAN (201812) ENGINE = InnoDB, 
    PARTITION p144 VALUES LESS THAN (201901) ENGINE = InnoDB, 
    PARTITION p146 VALUES LESS THAN (201902) ENGINE = InnoDB, 
    PARTITION p148 VALUES LESS THAN (201903) ENGINE = InnoDB, 
    PARTITION p150 VALUES LESS THAN (201904) ENGINE = InnoDB, 
    PARTITION p152 VALUES LESS THAN (201905) ENGINE = InnoDB, 
    PARTITION p154 VALUES LESS THAN (201906) ENGINE = InnoDB, 
    PARTITION p156 VALUES LESS THAN (201907) ENGINE = InnoDB, 
    PARTITION p158 VALUES LESS THAN (201908) ENGINE = InnoDB, 
    PARTITION p160 VALUES LESS THAN (201909) ENGINE = InnoDB, 
    PARTITION p162 VALUES LESS THAN (201910) ENGINE = InnoDB, 
    PARTITION p164 VALUES LESS THAN (201911) ENGINE = InnoDB, 
    PARTITION p166 VALUES LESS THAN (201912) ENGINE = InnoDB, 
    PARTITION p120 VALUES LESS THAN (202001) ENGINE = InnoDB, 
    PARTITION p122 VALUES LESS THAN (202002) ENGINE = InnoDB, 
    PARTITION p124 VALUES LESS THAN (202003) ENGINE = InnoDB, 
    PARTITION p126 VALUES LESS THAN (202004) ENGINE = InnoDB, 
    PARTITION p128 VALUES LESS THAN (202005) ENGINE = InnoDB, 
    PARTITION p130 VALUES LESS THAN (202006) ENGINE = InnoDB, 
    PARTITION p132 VALUES LESS THAN (202007) ENGINE = InnoDB, 
    PARTITION p134 VALUES LESS THAN (202008) ENGINE = InnoDB, 
    PARTITION p136 VALUES LESS THAN (202009) ENGINE = InnoDB, 
    PARTITION p138 VALUES LESS THAN (202010) ENGINE = InnoDB, 
    PARTITION p140 VALUES LESS THAN (202011) ENGINE = InnoDB, 
    PARTITION p142 VALUES LESS THAN (202012) ENGINE = InnoDB
) */   

更新其中一个期间年份和catno

的列

首次更新需要5秒,第二次更新需要30分钟,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  • 分区太多。大约50后,性能下降。 (你有大约800!)
  • 不要预先建立分区;它减慢了运营速度。
  • SUBPARTITIONs没有任何性能优势。
  • 不要使用DOUBLE(m,n)它会导致额外的舍入。使用普通DOUBLE(带有16位有效数字)或DECIMAL(m,n) ,使用合理的m和n 值。 DOUBLE(有或没有(m,n))需要8个字节; DECIMAL(50,4)大约需要25个字节!
  • int(50) - (50)没有任何意义。 INT总是需要4个字节。由于它似乎是YEAR,因此请使用该数据类型(仅2个字节)。
  • 拥有PRIMARY KEY
  • 如果这是您的主要查询,请INDEX(period_year, catno)

在完成所有这些之后,摆脱所有分区 - 它没有提供任何有用的东西(基于你到目前为止所说的)。 INDEX将为您提供您所缺少的速度。我的其他提示以其他各种方式提供帮助,其中一些提示可以直接或间接地帮助(例如,小=更快)。