2017-06-27 6 views
-1
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"列にインデックスを追加する方法はありますか?クエリ最適化のヘルプが必要ですか?

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

1つのトランザクションcat_noが更新されます: これは、更新クエリです!

テーブルサイズ= 10.2 GB、行= 15百万。

このクエリを実行すると、1年間に1時間以上かかるので、どのようにクエリを最適化できますか?

+1

あなたも 'period_year'列にインデックスを置くと考えていますか? –

+0

@TimBiegeleisenあなたは私の口からそれを取った。頻繁にアクセスされる項目であればCAT_NOでも試すことができるかもしれません –

+0

MySQLの 'explain'機能を見て、どのインデックスが意味があるかを判断するのに役立ちます:https://dev.mysql.com/doc/refman/5.7 /en/explain.html – arkascha

答えて

0

ご確認ください: この表には「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が範囲でパーティションとして使用されている場合は、更新したままユニークインデックスを使用できますか? –

関連する問題