2011-11-09 19 views
0

私のテーブルのフィールド型のセット:(MyISAMテーブル)このSQLクエリのインデックスを作成するにはどうすればよいですか? (MySQLの)

`expired` tinyint(1) value:0~1 
`site` int(11) value:0~3000 
`area` int(11) value:0~1050 
`endtime` bigint(13) value:timestamp(like:1285779723799) 

私はこのSQLを実行します:

select * from `deal` 
    where `expired`=1 && `site`=17 && `area`=108 
    order by `endtime` DESC limit 0,10 

どのように私は、このSQLのインデックスを作成するのですが最速ですか?

+1

それがインデックスに来るときあなたは、一般的に、あなたが頻繁に対して検索何を指標にしたいです。あなたはエンドタイムに照らして検索しないので、これを索引付けしたくないでしょう。また、ここだけでフィールドを検索する場合は、それも除外します...私はSQLのエキスパートではありませんが、インデックス作成の慣行を理解しています。 – Jared

答えて

2

クエリは、すべての列が含まれて...そして、これを試してみてください。

alter table test add index idx1(site, area, expired, endtime); 
+0

私はこれが良い解決策だとは思わない...もしあなたが索引付けしていないものもインデックスしていれば(私の理解から) – Jared

+0

期限切れ/エンドタイムの​​使用状況に応じて、 "過度の攻撃"になるかもしれない。 –

+0

@ Jaredこれはクエリによって異なります。提案された索引は、条件付き問合せをカバーします(しかし必ずしも結果セットではありません!)。しかし、クエリが単に「期限切れ」レコードを探していた場合は、*そのインデックスは役に立たなくなります;-)実際にはインデックスのオーバーインデックスに問題があり、データや使用方法によってはそれが「ベスト」ではない可能性がありますそれ以上のものを指す。 –

関連する問題