2011-09-20 257 views
1

這是來自教程查詢我讀MySQL的:索引名(姓氏,名字)

CREATE TABLE Employee (
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
departmentId TINYINT UNSIGNED NOT NULL 
    COMMENT "CONSTRAINT FOREIGN KEY (departmentId) REFERENCES Department(id)", 
firstName VARCHAR(20) NOT NULL, 
lastName VARCHAR(40) NOT NULL, 
email VARCHAR(60) NOT NULL, 
ext SMALLINT UNSIGNED NULL, 
hireDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
leaveDate DATETIME NULL, 
INDEX name (lastName, firstName), 
INDEX (departmentId) 
) 

是什麼INDEX name (lastName, firstName)功能?

如果我的問題不清楚,請告訴我。

謝謝
GusDe

+0

這是一個複合索引(索引表2的列)。你可以在這裏閱讀更多:http://stackoverflow.com/questions/1823685/when-should-i-use-a-composite-index – Galz

回答

6

INDEX name (lastName, firstName)是爲快速查找創建一個附加的索引,當您正在使用的姓氏有或沒有第一查詢。

這是一個複合索引,因爲它包含兩列。

添加本教程的作者是「猜測」,員工經常會被他們的名字或他們的departmentID查找。這就是爲什麼他或她創建了另外兩個索引。

- 主鍵索引是在大多數dbms系統中爲您自動創建的。

在現實生活中,僅僅依靠「猜測」表中哪些列應該被索引是不明智的。相反,使用「慢速查詢」日誌(MySQL example)來確定哪些查詢正在緩慢執行以及如何加快速度。通常的答案是添加另外一個或兩個索引。

ps。索引的缺點是它們增加了在表中添加,更新或刪除數據所需的時間,因爲表索引必須被修改。索引的第二個缺點是它們佔用了數據庫的空間。但是這些日子裏存儲很便宜。

由於大多數數據庫的讀取次數遠遠多於寫入次數,因此索引提供的查詢速度通常遠遠超過成本。

+0

謝謝larry,這個'索引'的問題讓我很痛苦學習基礎MySQL再次:) – GusDeCooL