在MySql中有一个大表historical_price
与表n:1
,instrument
和timestamp
有一个price
关系:
CREATE TABLE `historical_price`
(
`price_nbr` int(11) NOT NULL AUTO_INCREMENT,
`insid` int(11) NOT NULL,
`curr_insid` int(11) NOT NULL,
`timestamp_` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`price` float DEFAULT NULL,
PRIMARY KEY (`price_nbr`),
KEY `insid` (`insid`),
KEY `curr_insid` (`curr_insid`),
KEY `timestamp_` (`timestamp_`),
CONSTRAINT ...
) ENGINE=InnoDB
我想运行这样的许多查询:
SELECT price
FROM historical_price
WHERE insid=566 AND curr_insid=2 AND timestamp_ > '2012-05-01'
LIMIT 0,1
用于获取与instrument
timestamp
条件匹配的greater than
上的旧记录。
explain
输出为:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | historical_price | ref | insid,curr_insid,timestamp_ | insid | 4 | const | 987190 | Using where
在添加新的多列索引或用于帮助数据库引擎的新列之前,我想询问您对哪个选项可以产生最佳结果的看法,如果有的话。
答案 0 :(得分:2)
您应该添加一个包含insid,curr_insid,timestamp_