这是我阅读的教程中的查询
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 :(得分:6)
INDEX name (lastName, firstName)
正在使用带有或不带第一个名字的姓氏进行查询时为快速查找创建一个附加索引。
它是一个复合索引,因为它包含两列。
已添加本教程的作者“猜测”员工通常会按其姓名或部门ID查找。这就是为什么他或她创建了两个额外的索引。
- 在大多数dbms系统中自动为您创建主键索引。
在现实生活中,完全依靠“猜测”表中的哪些列应该被编入索引是不明智的。相反,使用“慢查询”日志(MySQL example)来确定哪些查询正在缓慢执行以及如何加快它们的速度。通常答案是添加另一个或两个索引。
PS。索引的缺点是它们会增加在表中添加,更新或删除数据所需的时间,因为必须修改表和索引。索引的第二个缺点是它们在数据库中占据了一席之地。但是这些天存储很便宜。
由于大多数数据库的读取次数远多于写入次数,因此索引提供的查询速度通常远远超过成本。