2011-07-14 17 views
1
Action Keyname Type Unique Packed Column Cardinality Collation Null Comment 
Edit Drop PRIMARY BTREE Yes No TickerID 23200 A  
Timestamp 13897209 A 
Edit Drop TickerID BTREE No No TickerID 11737 A  
Edit Drop Timestamp BTREE No No Timestamp 18 A  

~99,424,209 InnoDB utf8_general_ci 5.1 GiB 

私がここで尋ねると思った不要なインデックスを削除することでこのDBを "最適化"しようとする前に。このテーブルには多くのヒットがありますので、インサートのパフォーマンスを向上させたいと思います。 TickerIDの単一インデックスが冗長であることを示すようなネット上の5つの記事を読んでいます。ティッカーIDだけでクエリを実行すると、複数のインデックス(TickerID、Timestamp)が使用されるためです。冗長MySQLインデックス?

時々、私はEODの報告をしたいので、SELECT * WHERE Timestamp > Today() - 1 dayなどのようにすることもできます。タイムスタンプインデックスも必要ですか?

+0

はticketidsが連続しているのか、それともuuidsですか?列のデータ型は何ですか? –

答えて

0

tickerId, timestampのこのインデックスは、tickerIdのインデックスのみを使用できるすべてのクエリで使用できます。

しかし、そのようなクエリのために:tickerIdには平等フィルタがないので(tickerId, timestamp

SELECT * 
FROM mytable 
WHERE Timestamp > Today() - 1 

インデックス)、使用されません。このクエリの

、あなただけのtimestampにインデックスを作成したり、thуクエリを書き直す必要があります。

SELECT m.* 
FROM (
     SELECT DISTINCT tickerId 
     FROM mytable 
     ) md 
JOIN mytable m 
ON  m.tickerId = md.tickerId 
     AND m.timestamp > TODAY() - 1 

しかし、後者のクエリは、tickerIdに異なる値をたくさん持っている場合は特に、あまり効率的です。

+0

確認していただきありがとうございます。 – user805547

+0

@user:あなたを歓迎します。私の答え(あなたが尋ねたすべての質問に対する他の良い答え)を受け入れたものとしてマークしてください。これは人々にあなたを助けてくれるでしょう。 – Quassnoi