键列和非键键之间的区别

时间:2010-11-29 08:59:54

标签: sql mysql

抱歉新手问题。 我以下列方式定义了一个表

CREATE TABLE `class1` (
`name` varchar(20) NOT NULL,
`familyname` varchar(20) NOT NULL,
`id` int(11) DEFAULT NULL,
KEY `class1` (`name`,`familyname`));

你能解释一下我在这里有一个名字和姓氏作为关键的区别。

我必须在表格中输入值并运行查询但我无法理解它给了我什么?如果我没有将名称和姓氏定义为键,我会得到相同的结果。

3 个答案:

答案 0 :(得分:2)

密钥(也称为索引)不会更改查询结果,但有时可以使查询更快。

如果您有兴趣,可以阅读不同类型的密钥here

答案 1 :(得分:1)

mysql中create table语法中的KEY关键字是INDEX的同义词,将在'name','familyname'列上创建索引。

这不会影响表上的任何约束,但是当在select语句的where子句中使用'name'和'familyname'列时,会更快地对表进行查询。

如果要在这两列上创建主键,则应使用:

CREATE TABLE `class1` (
`name` varchar(20) NOT NULL,
`familyname` varchar(20) NOT NULL,
`id` int(11) DEFAULT NULL,
PRIMARY KEY (`name`,`familyname`));

这将阻止您插入具有相同“name”和“familyname”组合的多行。

答案 2 :(得分:0)

如果你想从你的表中获取数据,基于键或索引字段(如上所述),你的查询将执行得更快,因为该表将保留关于这些值的索引。

但是,这也存在不利因素。添加不需要的索引会对您的性能产​​生负面影响。总而言之:索引可以加速您的数据库,但在添加它们之前总是检查它们是否真的需要。