2011-11-12 65 views
0

該表包含4列:id(autoincrement),userid(唯一,像ssn),狀態(TINYINT(1),0或1值,非NULL),user_info( VARCHAR(1000))。MySQL索引性能...索引在WHERE取決於狀態

我應該把指數的用戶ID列,以提高性能,如:請求 30%是請求

"SELECT user_info from Table1 WHERE userid='1234567'"; 

40%:請求

"SELECT user_info from Table1 WHERE userid='1234567' AND status=0"; 

20%:

"SELECT user_info from Table1 WHERE userid='1234567' AND status=1"; 

或者,有更好的方法來提高性能(我應該考慮一下不知何故索引狀態欄)?

如果不是(30%,40%,20%)它會變成(9%,90%,1%),即大多數請求的狀態爲0,我應該改變一些東西嗎? 謝謝。

+1

像「userid」這樣的表名意味着該列是外鍵(對於用戶表,id字段。) 如果您將其定義爲InnoDB表上的外鍵,它會自動建立索引。 http://stackoverflow.com/questions/304317/does-mysql-index-foreign-key-columns-automatically 關於索引FK的好信息: http://asktom.oracle.com/pls/apex ?/ F p = 100:11:0 :::: P11_QUESTION_ID:292016138754 – OpenSorceress

回答

3

status上的索引不太可能增加SELECT性能,因爲列內容不夠多樣化。 userid的索引很可能會提高性能,因爲列內容非常多樣化。

當您將userid列定義爲unique時,自動創建的唯一索引應該已在您的查詢中使用。所以不需要定義額外的索引。

0

我建議刪除ID列(合成密鑰 - 它是什麼?)。比做一個user_id(第一個)和狀態(第二個)的累積PK。

更好的解決方案 - 從PK中刪除狀態並僅通過user_id進行選擇。檢查應用程序中的狀態並拋出404或其他。