2012-09-01 144 views
1

在MySQL有一个大表historical_price 2个n:1关系表instrument,一个timestampprice优化查询

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 

用于获取与该 greater than条件匹配的那个instrument上的较早记录。

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 

然后加入新的多列索引,或者帮助数据库引擎的新列,我想问问你的意见关于哪个选项可能导致最佳结果,如果有的话。

回答

2

你应该添加一个多键,包括insid,curr_insid,timestamp_

+0

哇!我期待着事情变得更加复杂......现在它工作的很好 – perissf