大家下午好。我来找你是希望你能为我遇到的一个 MYSQL 优化问题提供一些指导。首先,一些系统规格。
- MYSQL 版本:5.2.47 CE
- WampServer v 2.2
计算机:
- 三星 QX410(笔记本电脑)
- Windows 7的
- 英特尔 i5 (2.67 Ghz)
- 4GB 内存
我有两张桌子:
“Delta_Shares”包含股票交易数据,并包含两列注释。“Ticker”是 Varchar(45),“Date_Filed”是日期。该表有大约 300 万行(都是唯一的)。我在(Ticker,Date_Filed)上的这个表“DeltaSharesTickerDateFiled”上有一个索引。
“Stock_Data”包含两列注释。“Ticker”是 Varchar(45),“Value_Date”是日期。该表有大约 1900 万行(都是唯一的)。我在 (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 并不太熟悉,尽管这个问题使我在优化的道路上明显走下坡路)。我非常感谢任何想法或建议。
用“解释选择”更新
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