2011-07-08 16 views
3

表:このSQLクエリのインデックスはどのように作成できますか?

CREATE TABLE `deal` (
    `id` int(11) NOT NULL default '0', 
    `site` int(11) NOT NULL default '0', 
    `time` bigint(13) NOT NULL default '0', 
    PRIMARY KEY (`id`), 
    KEY `site` (`site`), 
    KEY `time` (`time`,`site`) 
) TYPE=MyISAM 

SQLクエリ:

select * from `deal` where time>0 && site=8 

は、私は、インデックスを作成します。 site:このクエリの time

だが、なぜこのクエリは常にインデックスを使用していますか?

explain select * from `deal` where time>0 && site=8 

出力:

table type possible_keys key key_len ref rows Extra 

deal  ref  site,time  site 4   const 1  Using where 

答えて

5

あなたはsite + time(はい、順序が重要)複合インデックスを作成する必要があります。

だから今のインデックスsitetimeの両方を削除して、2を作成します。

  1. KEY site (site, time)
  2. KEY time (time)
+0

感謝zerkms、 'KEYサイト(サイト、時間が)'完全 'KEYを置き換えることができますサイト(サイト) '? (私は 'select * from deal from site = 123'も必要です) – Koerr

+1

@ Zenofo:はい、それは"左端 "と呼ばれています。したがって、索引 'a + b + c'では、索引を「a」と「a + b」にする必要はありません。なぜなら、 – zerkms

関連する問題