使用时间戳索引优化查询

时间:2012-09-01 17:25:07

标签: mysql sql optimization

在MySql中有一个大表historical_price与表n:1instrumenttimestamp有一个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

在添加新的多列索引或用于帮助数据库引擎的新列之前,我想询问您对哪个选项可以产生最佳结果的看法,如果有的话。

1 个答案:

答案 0 :(得分:2)

您应该添加一个包含insid,curr_insid,timestamp_

的多键