我知道如何使用INDEX,如下面的代码 . 我知道如何使用外键和主键 .
CREATE TABLE tasks (
task_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_id INT UNSIGNED NOT NULL DEFAULT 0,
task VARCHAR(100) NOT NULL,
date_added TIMESTAMP NOT NULL,
date_completed TIMESTAMP,
PRIMARY KEY (task_id),
INDEX parent (parent_id),
....
但是我发现使用KEY而不是INDEX的代码如下 .
...
KEY order_date (order_date)
...
我无法在MySQL官方页面中找到任何文档 .
谁能告诉我KEY和INDEX之间有什么区别?我可以看到的不同之处在于,当我使用KEY ...时,我需要重复这个词,例如KEY order_date(order_date) .
5 回答
没有区别 . 他们是同义词 .
来自the CREATE TABLE manual entry:
这是关于"difference"的一个很好的描述:
http://discuss.fogcreek.com/joelonsoftware5/default.asp?cmd=show&ixPost=152398
“MySQL要求每个Key都要编入索引,这是MySQL专用的实现细节,以提高性能 . ”
它被提及为'create table' docs中
INDEX
的同义词:MySQL 5.5 Reference Manual :: 13 SQL Statement Syntax :: 13.1 Data Definition Statements :: 13.1.17 CREATE TABLE SyntaxNos已经引用了该部分并将5.1的帮助链接起来 .
像
PRIMARY KEY
为您创建主键和索引,KEY
仅创建索引 .键是一组列或表达式,我们在其上构建索引 .
虽然索引是存储在数据库中的结构,但键完全是逻辑概念 .
Index帮助我们快速访问记录,而键只是唯一地标识记录 .
每个表都必须有一个键,但索引不是必需的 .
检查https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721
键是在表中扮演非常特定角色的特殊字段,键的类型决定了它在表中的用途 .
索引是RDBMS(数据库管理系统)提供的用于改进数据处理的结构 . 索引与逻辑数据库结构无关 .
所以...
键是用于标识表中记录的逻辑结构,索引是用于优化数据处理的物理结构 .
资料来源:纯粹人类的数据库设计
作者:Michael Hernandez