
MySQL索引类型简介
下面的文章提供了一个关于MySQL索引类型的概要。MySQL索引是一种数据库结构类型,它负责提高表操作的速度。在MySQL中,索引可以通过使用一个或多个列来形成,这为快速的随意查找和熟练地集合访问记录提供了基础。索引主要用于服务器数据库表,以迅速找到具有表列特定值的表行。如果表中没有索引,那么MySQL就需要扫描整个表来定位和检查适当的表行。
当表很大、数据很大时,这可能导致搜索过程更慢。因此,MySQL索引及其各种类型有助于创建、删除、搜索和获取扫描表数据中特定值的记录列表。用户不能查看索引,因为索引只有利于提示SQL查询,并由数据库搜索引擎实施,以非常迅速地定位记录。
MySQL中不同类型的索引
在建立索引时,用户应该考虑到哪些表列将被实施,以迅速编写具有WHERE子句的SQL查询,并在这些表列上形成一个或多个索引。
像INSERT和UPDATE这样的语句在有索引的表中会消耗更多的时间。另一方面,SELECT语句在这些表上执行得更快,因为在插入或更新查询执行期间,服务器也会执行插入或更新相关的索引值。此外,优化查询,如ORDER BY和GROUP BY与约束条件和MAX()、MIN()。
在MySQL中,我们有三种不同的方法来创建索引。
a.使用关键字CREATE INDEX。
CREATE INDEX Indexname ON Tablename (indexcolumn1, indexcolumn2, ….);
b.使用关键字CREATE TABLE来创建一个表。
CREATE TABLE Tablename (column1 CHAR (30) NOT NULL, INDEX (column2));
c.使用关键字ALTER TABLE。
ALTER TABLE Tablename ADD INDEX (column1, column2);
现在,让我们看看MySQL索引的类型,所有6种类型中的每一种都用于不同的目的。
1.唯一索引
Unique是MySQL索引的一种类型,它规定了表列的所有值,当实施时,必须是独特的。在单列唯一索引中,被索引的列不能有重复的值。而在多列唯一索引中,列值可以在单个表列中复制,但每行中的列值分组应该是唯一的。因此,这个唯一索引对于避免列中数值的重复是有用的,一般来说,我们在创建表之后定义MySQL索引。
代码
CREATE UNIQUE INDEX Indexname ON Tablename(indexcolumn1, indexcolumn2,…);
OR,
CREATE TABLE Tablename(Column1 CHAR (30) NOT NULL, UNIQUE INDEX (column2));
OR,
ALTER TABLE Tablename ADD UNIQUE INDEX (column1, column2);
2.主键
主键是唯一索引的一种类型,它规定作为主键的列必须不包含空值。每个表行都应该有一个表列或列组的值。由于这个原因,我们通常需要在尽可能少的列上定义一个主索引,而且大多数情况下,主键被设置在一个单列上。一旦列的值被设置,主键就不能被修改。
让我们看看下面的查询,以创建索引-主键。
代码
CREATE TABLE Tablename (Columnname Data_type PRIMARY KEY );
OR,
CREATE TABLE Tablename (Column1 CHAR(30) NOT NULL, Column2 CHAR(30) NOT NULL, PRIMARY KEY (Column1, Column2));
OR,
ALTER TABLE Tablename ADD PRIMARY KEY(Column1, Column2);
3.简单索引|普通索引|正常索引
在这种类型的索引中,被命名为简单、常规或正常,指定的列值不需要是唯一的,也可以是NULL。它们的补充基本上是为了帮助数据库更快地搜索记录的过程。
请看下面的查询代码,创建简单、常规和正常类型的索引。
代码
CREATE INDEX Indexname ON Tablename (Indexcolumn1, Indexcolumn2, …);
OR,
CREATE TABLE Tablename(Column1 CHAR(30) NOT NULL, INDEX(Column2));
OR,
ALTER TABLE Tablename ADD INDEX(Column1, Column2);
4.全文索引
这种类型的索引是为全文搜索而实现的,正如其名称本身所暗示的那样。偶尔,假设你需要找到包括某个单词或单词组合的文本块,或者它甚至可以是在较高的文本块中找到的子串,那么这种全文索引就起到了至关重要的作用,因此,在搜索引擎和电子商务中广泛实施。但是这种索引只为数据库中的MyISAM和InnoDB表维护,并且只能由VARCHAR、CHAR和TEXT表列组成。
找到下面的查询,在MySQL中创建一个全文本索引。
代码
CREATE FULLTEXT INDEX Indexname ON Tablename(indexcolumn1, indexcolumn2, …);
OR,
CREATE TABLE Tablename (column1 TEXT, FULLTEXT(column1));
OR,
ALTER TABLE Tablename ADD FULLTEXT(column1, column2);
5.空间索引
空间索引是MySQL中的一种新的索引类型,使用不广泛。MySQL允许对具有NOT NULL约束的几何值列创建空间索引。空间索引创建一个R树索引。该引擎为维护空间表列的非空间索引的存储引擎建立了一个B树索引。这个应用在空间值上的B树索引为精确的值查询提供了好处,但是对于范围扫描却没有好处。优化器可以在有SRID限制的列上应用空间索引。
下面是查询空间索引的代码。
代码
CREATE INDEX Indexname ON Tablename(Indexcolumn1);
OR,
CREATE TABLE Tablename (column1 GEOMETRY NOT NULL SRID 4326,SPATIAL INDEX(Column2));
OR,
ALTER TABLE Tablename ADD SPATIAL INDEX (column1, column2);
6.降序索引
这个降序索引是一个以反序存储的一致索引,只有MySQL的8+版本可用。当用户运行查询以找出最新添加的数据时,它是支持的,例如你可能想查看最新的六个帖子或所有帖子的五个最新评论。以前以反顺序扫描索引会导致性能问题。使用降序索引的顺向顺序会更有资源。这个降序索引也使得优化器有可能应用多个表列索引,当最有效的扫描顺序融合了少数表列的升序和少数其他表列的降序时,就会这样做。
请看下面的查询来创建降序索引。
代码
CREATE INDEX Indexname ON Tablename (Indexcolumn1 DESC);
OR,
CREATE TABLE Tablename (Column1 INT, Column2 INT, INDEX asc_index1(Column1 ASC, Column2 ASC), INDEX desc_index1 (Column1 DESC, Column2 DESC));
OR,
ALTER TABLE Tablename ADD INDEX(column1 DESC, column2 ASC);
结论
MySQL索引是一种调整性能的技术,用于更快地检索数据记录。在表中,索引为每一个显示在索引表列中的值做一个插入。索引对表的操作也很重要。MySQL索引实际上可以说是存储索引字段或主键的表,以及指向真实表中每条记录行的指针。