【问题标题】:difference between key column and non key one键列和非键一的区别
【发布时间】:2011-05-17 04:10:49
【问题描述】:

抱歉新手问题。 我已经通过以下方式定义了一个表

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

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

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

【问题讨论】:

  • 我认为 Key 是一个索引,索引使查询更快,如果你添加多个索引它会加快多个列,缺点是现在有多个列,更多数据意味着内存中的数据更少,更多在磁盘上,所以查询速度较慢。

标签: sql mysql


【解决方案1】:

键,也称为索引,不会改变查询的结果,但有时它可以使查询更快。

如果你有兴趣,可以阅读不同类型的键here

【讨论】:

  • @Ed Guiness 感谢您提供的链接,从中获得了有用的信息。
【解决方案2】:

mysql 中创建表语法中的 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`));

这将阻止您插入具有相同“姓名”和“家庭姓名”组合的多行。

【讨论】:

    【解决方案3】:

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

    但是,这也有不利的一面。添加不需要的索引将对您的性能产​​生负面影响。所以总结一下:索引可以加速你的数据库,但在添加它们之前总是检查它们是否真的需要。

    【讨论】:

    • 一般来说,如果我不想要那些优化并且我不感兴趣独特的东西,定义一个没有键列的表是否可以?
    • 是的。大多数情况下,创建的表没有索引,如果出现性能问题,可以稍后添加。
    猜你喜欢
    • 2012-03-22
    • 2011-09-16
    • 2011-04-06
    • 2013-12-22
    • 2013-07-12
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多