2011-09-20 261 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