2011-04-11 50 views
1

我是數據庫的新手。如果我使用兩列的主鍵,userIddayOfWeek。我如何搜索這個主鍵?帶多列查找的主鍵

(一週中的某天是int,其中1 =星期一,2 =星期二等)

我會做使用:

SELECT * 
WHERE userId = 1 
    AND dayOfWeek = 4 

將其掃描整個數據庫或使用由主提供的信息鍵?是否有另一個更合適的查詢我可以使用?

回答

1

主鍵索引在內部與其他索引非常相似,除非您明確指出這個是唯一標識記錄的關鍵。它只是一個帶有「必須是唯一」約束的索引。

數據庫是否使用複合主鍵取決於您在查詢中如何指定關鍵字段。鑑於您的PK(用戶ID,星期),然後

SELECT * FROM mytable WHERE (userID = 1); 
SELECT * FROM mytable WHERE (userID = 1) AND (dayOfWeek = 4); 

將都使用了主鍵索引,因爲你已經使用的字段在他們的關鍵之內指定的順序。

但是,不會,因爲userID未指定

SELECT * FROM mytable WHERE (dayOfWeek = 4) 

,並userID自帶的鍵定義dayOfWeek之前。

2

沒有查詢將掃描整個數據庫,除非您指定該數據庫中的所有表。在最糟糕的情況下,如果您通過不是主鍵或索引的列進行搜索,您可能會期望進行表掃描(這正是我認爲您的真正意思)。

您的示例是一個組合主鍵,因爲它使用多個列作爲鍵。 MySQL現在自動爲主鍵索引(從v5開始),所以通過所有主鍵列進行搜索不太可能導致表掃描,而是索引查找/掃描。這取決於是否使用其他標準。按照主鍵(IE:user_id only)的一部分進行搜索可能會使用索引 - 假設它是覆蓋索引,如果user_id列是從左邊開始的第一個索引,那麼可以使用索引。否則不是。