在查询优化中需要帮助?

问题描述:

CREATE TABLE fa_nls_pd_test ( 
MKT varchar(100) DEFAULT NULL, 
PROD varchar(1000) DEFAULT NULL, 
PRODUCT_LEVEL varchar(100) DEFAULT NULL, 
CAT_NO int(10) DEFAULT NULL, 
DYNAMIC_TIME_PERIOD varchar(100) DEFAULT NULL, 
PRODUCT_LEVEL_DIST varchar(100) DEFAULT NULL, 
PRODUCT_LEVEL_ACV_TREND varchar(100) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

如何将索引添加到列“CAT_NO”? 这是更新查询:在查询优化中需要帮助?

update fa_nls_pd_test set DYNAMIC_TIME_PERIOD = NULL where CAT_NO = 0 and period_year = 201502; 

一个交易cat_no直到11将更新!

表大小= 10.2 GB,行= 15百万。

当我运行此查询时,它需要一个周期的一个多小时,我如何优化查询?

+1

你有没有考虑也把一个指标的'period_year'列? –

+0

@TimBiegeleisen你从我嘴里拿走了那个。也许他也可以尝试CAT_NO,如果这是一个经常访问的项目 –

+0

看看MySQL的'explain'功能,它有助于确定哪些索引有意义:https://dev.mysql.com/doc/refman/5.7 /en/explain.html – arkascha

请检查: 列“period_year”在此表中不存在。

如果您的表列period_year,请尝试复合索引:

alter table fa_nls_pd_test add unique index(CAT_NO,period_year); 

复合索引文件:https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html

+0

我没有在这里输入,但它在我的实时数据库中。 –

+0

我已经更新了答案,请尝试复合索引 –

+0

Hey @Wang Steven,如果cat_no用作子分区,而period_year用作范围分区,我们是否仍然可以使用唯一索引。 –