こんにちは。私が抱えている MYSQL の最適化の問題について、何らかの方向性を示していただけることを願って、私はあなたのところに来ています。まず、いくつかのシステム仕様。
- MYSQL バージョン: 5.2.47 CE
- ワンプサーバー v 2.2
コンピューター:
- サムスン QX410 (ラップトップ)
- ウィンドウズ7
- インテル i5 (2.67 GHz)
- 4GBのRAM
私は2つのテーブルを持っています:
「Delta_Shares」には株式取引データが含まれており、注目すべき 2 つの列が含まれています。「ティッカー」は Varchar(45)、「Date_Filed」は日付です。このテーブルには約 300 万行 (すべて一意) があります。このテーブルには、(Ticker, Date_Filed) の「DeltaSharesTickerDateFiled」というインデックスがあります。
「Stock_Data」には注目すべき 2 つの列が含まれています。「Ticker」は Varchar(45)、「Value_Date」は日付です。このテーブルには約 1,900 万行 (すべて一意) があります。このテーブルには、(Ticker, Value_Date) の「StockDataIndex」というインデックスがあります。
Stock_Data テーブルから情報を検索して、「Delta_Shares」テーブルを更新しようとしています。 次のクエリは、実行に 4 時間以上かかります。
update delta_shares A, stock_data B
set A.price_at_file = B.stock_close
where A.ticker = B.ticker
and A.date_filed = B.value_Date;
過剰な実行時間は、多数の行、不十分なインデックス作成、不適切なマシン、不適切な SQL 記述、または上記のすべての自然な結果ですか? 役立つ追加情報があれば教えてください (私は MYSQL にあまり詳しくありませんが、この問題により最適化の道を大幅に下ることができました)。ご意見やご提案をいただければ幸いです。
「EXPLAIN SELECT」で更新
1(id) SIMPLE(seltype) A(table) ALL(type) DeltaSharesTickerDateFiled(possible_keys) ... 3038011(rows)
1(id) SIMPLE(seltype) B(table) ref(type) StockDataIndex(possible_keys) StockDataIndex(key) 52(key_len) 13ffeb2013.A.ticker,13ffeb2013.A.date_filed(ref) 1(rows) Using where
テーブルの説明で更新されました。Stock_Data テーブル:
idstock_data int(11) NO PRI auto_increment
ticker varchar(45) YES MUL
value_date date YES
stock_close decimal(10,2) YES
Delta_Shares テーブル:
iddelta_shares int(11) NO PRI auto_increment
cik int(11) YES MUL
ticker varchar(45) YES MUL
date_filed_identify int(11) YES
Price_At_File decimal(10,2) YES
delta_shares int(11) YES
date_filed date YES
marketcomparable varchar(45) YES
market_comparable_price decimal(10,2) YES
industrycomparable varchar(45) YES
industry_comparable_price decimal(10,2) YES
Delta_Shares からのインデックス:
delta_shares 0 PRIMARY 1 iddelta_shares A 3095057 BTREE
delta_shares 1 DeltaIndex 1 cik A 18 YES BTREE
delta_shares 1 DeltaIndex 2 date_filed_identify A 20633 YES BTREE
delta_shares 1 DeltaSharesAllIndex 1 cik A 18 YES BTREE
delta_shares 1 DeltaSharesAllIndex 2 ticker A 619011 YES BTREE
delta_shares 1 DeltaSharesAllIndex 3 date_filed_identify A 3095057 YES BTREE
delta_shares 1 DeltaSharesTickerDateFiled 1 ticker A 11813 YES BTREE
delta_shares 1 DeltaSharesTickerDateFiled 2 date_filed A 3095057 YES BTREE
Stock_Data からのインデックス:
stock_data 0 PRIMARY 1 idstock_data A 18683114 BTREE
stock_data 1 StockDataIndex 1 ticker A 14676 YES BTREE
stock_data 1 StockDataIndex 2 value_date A 18683114 YES BTREE