2012-01-25 151 views
1

我的問題是關於索引和主鍵。索引和主鍵

讓我們假設我們有這樣一個表:

demo_table 

| id     | int(11)  | NO | PRI |   | 
| subject    | varchar(255) | YES |  | NULL | 
| body     | text   | YES |  | NULL | 
| to     | varchar(255) | YES | MUL | NULL | 
| from     | varchar(255) | YES | MUL | NULL | 
| media    | varchar(255) | YES |  | NULL | 

我有一個查詢,查找特定的最後一排「到」 /「媒體」夫婦:

select * from demo_table where to="" and media="" order by id desc limit 0,1; 

和我想爲我的表創建一個索引。我應該創建這樣的指標:

CREATE INDEX to_media on demo_table(media,to); 

或像這樣:

CREATE INDEX to_media on demo_table(id,media,to); 

看到該ID進行排序?

+0

什麼是你的問題,你有什麼問題嗎? – pltvs

+1

它是MyISAM還是InnoDB表?在InnoDB中,PK始終是索引中的第一列,即使您沒有指定它。 – Mchl

+0

您應該留意有這麼多列允許空值。索引VARCHAR(255)列不一定是個好主意(儘管它並不總是一個壞主意)。你會得到查詢優化器使用的三部分索引嗎?我不相信你會。您可能會使用兩部分索引,但我不確定您是否會使用足夠的索引來保證其存在。 –

回答

0
CREATE INDEX to_media on demo_table(id,media,to); 
+0

這是innodb表。 我的問題是要知道在問題中提出的兩種類型的索引是否有區別。僅供參考:在我的情況下,有> 100000行被檢查。 –

+0

它取決於如... 的要求如果它的大規模和更多的插入/更新聲明去Innodb其他明智去MYSAM – Madhu