2012-08-13 79 views
0

我有一個表,其中包含兩列:dteid。在一起,這兩個確定一個獨特的記錄。有沒有使用這兩個列設置一個主鍵或只創建一個常規的索引像這樣之間的訪問時間差:主鍵和索引之間的訪問時間差異mysql

create index idx on mytable (dte, id) 
create index idx2 on mytable (id) 

我在訪問時間上專門尋找答案與其他表的連接是也有這兩列。特別是當我在連接上執行explain時,看起來很奇怪,它告訴我需要檢查其中一個表中的15行,其中該配對再次是唯一的。

+0

http://stackoverflow.com/a/708508/1506008 – Shubhansh 2012-08-13 06:31:28

+0

http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html – Shubhansh 2012-08-13 06:36:32

+0

這不回答這個問題雖然:在這裏速度差異? – Alex 2012-08-13 11:46:30

回答

0

簡而言之,primary key標識磁盤上的一行。其他索引包含指向主鍵的鏈接(至少在InnoDB中)。索引應該存在於內存中,並將數據庫引擎發送到缺少數據的磁盤。如果索引包含查詢所需的所有數據(以便引擎不需要在磁盤上),則該索引在查詢中被稱爲covering

如果你打算一次匹配兩列的行(或者總是輸出它們),那麼兩個顯示的索引將被覆蓋,並且速度將會相對相同(取決於選擇性)。

但索引本身需要RAM。對於InnoDB,任何非主鍵都包含主鍵的副本。因此,就你而言,將第二個字段包含在主鍵中可能會更好。

這是所有的理論,在實踐中我還沒有理解你的問題。