gpt4 book ai didi

mysql - 如何在 mysql 中声明二级或非唯一索引?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:17 24 4
gpt4 key购买 nike

mysql好像只提供了primary,unique,key,fulltext,spatial四种索引。但是我想知道如何为那些不唯一但经常被索引的列声明索引?因为我的数据库服务器遇到了瓶颈,我想为经常索引的列创建索引。

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

请区分“key”和“index”。

前者是逻辑概念(限制,因此改变了数据的含义),后者是物理概念(不改变含义,但可以改变性能)1

让我们弄清楚基本概念:

  • “ super 键”是任何组合在一起的唯一属性集。
  • “候选键”(或只是“键”)是最小的 super 键 - 如果您从它身上拿走任何属性,它就不再是唯一的。
  • 所有键在逻辑上都是等价的,但出于实际2和历史原因,我们选择其中一个作为“主键”,其余称为“备用键”。
  • 在数据库中,您使用 PRIMARY KEY 约束声明主键,并在 NOT NULL 字段上使用 UNIQUE 约束声明备用键。
  • 大多数 DBMS(MySQL 也不异常(exception))会自动在键下创建索引。尽管如此,它们仍然是独立的概念,一些 DBMS 实际上允许您拥有一个没有索引的键。

不幸的是,MySQL 把术语搞乱了:

  • MySQL 使用 column 约束 KEY 作为 PRIMARY KEY 的同义词。
  • MySQL 使用 table 约束 KEY 作为索引,不是 键,如果您使用 CREATE INDEX 语句也是如此。

例如,两者...

CREATE TABLE T (
A INT PRIMARY KEY,
B INT
);

CREATE INDEX T_IE1 ON T (B);

...和...

CREATE TABLE T (
A INT KEY,
B INT,
KEY (B)
);

...意思相同:A 上的主键(A 上有唯一/聚簇索引)和 B 上的非唯一索引。


1 唯一索引在这里很奇怪——它有点跨越了两个世界。但是让我们下次再讨论......

2 例如,InnoDB clusters主键上的表。

关于mysql - 如何在 mysql 中声明二级或非唯一索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23525790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com