代码之家  ›  专栏  ›  技术社区  ›  Night Walker

键列与非键列的区别

  •  4
  • Night Walker  · 技术社区  · 15 年前

    很抱歉有个新问题。 我用以下方法定义了一个表

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

    你能告诉我这里的区别是什么吗?我这里有一个姓和一个姓作为钥匙。

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

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

    如果你感兴趣的话,你可以阅读不同种类的钥匙 here .

        2
  •  1
  •   Neal Donnan    15 年前

    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”组合的多行。

        3
  •  0
  •   Jens    15 年前

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

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