1

MySql には、テーブルaと aへのhistorical_price2 つn:1のリレーションシップを持つ大きなテーブルがあります。instrumenttimestampprice

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

新しいマルチカラム インデックス、またはデータベース エンジンを支援するための新しいカラムを追加する前に、どのオプションが最良の結果につながるかについて、意見をお聞きしたいと思います。

4

1 に答える 1

2

で構成されるマルチキーを追加する必要がありますinsid,curr_insid,timestamp_

于 2012-09-01T17:26:59.377 に答える