MySQLi - 索引

数据库索引是一种提高表操作速度的数据结构。 可以使用一列或多列创建索引,为快速随机查找和记录访问的高效排序提供基础。

创建索引时,应考虑哪些列将用于进行 SQL 查询并在这些列上创建一个或多个索引。

实际上,索引也是表的类型,它将主键或索引字段以及指向实际表中每条记录的指针保存起来。

用户看不到索引,它们只是用来加速查询,并且将被数据库搜索引擎用来快速定位记录。

INSERT 和 UPDATE 语句在具有索引的表上花费更多时间,而 SELECT 语句在这些表上会变得更快。 原因是数据库在进行插入或更新时,也需要插入或更新索引值。

简单且唯一的索引

您可以在表上创建唯一索引。 唯一索引意味着两行不能具有相同的索引值。 这是在表上创建索引的语法。

CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);

您可以使用一列或多列来创建索引。 例如,我们可以使用 NAME_INDEX 在tutorials_inf上创建索引。

CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);

您可以在表上创建简单的索引。 只需从查询中省略 UNIQUE 关键字即可创建简单索引。 简单索引允许表中存在重复值。

如果要按降序对列中的值进行索引,可以在列名后添加保留字 DESC。

mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name DESC);

用于添加和删除 INDEX 的 ALTER 命令

为表添加索引的语句有四种类型 −

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) − 该语句添加了一个 PRIMARY KEY,这意味着索引值必须是唯一的并且不能为 NULL。

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) − 此语句创建一个索引,其值必须是唯一的(NULL 值除外,它可能会出现多次)。

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) − 这会添加一个普通索引,其中任何值都可能出现多次。

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) − 这将创建一个特殊的 FULLTEXT 索引,用于文本搜索目的。

这是在现有表中添加索引的示例。

mysql> ALTER TABLE tutorials_inf ADD INDEX (id);

您可以通过使用 DROP 子句和 ALTER 命令来删除任何 INDEX。 尝试以下示例来删除上面创建的索引。

mysql> ALTER TABLE tutorials_inf DROP INDEX (c);

您可以通过使用 DROP 子句和 ALTER 命令来删除任何 INDEX。 尝试以下示例来删除上面创建的索引。

用于添加和删除主键的 ALTER 命令

您也可以用同样的方式添加主键。 但请确保主键适用于非 NULL 的列。

以下是在现有表中添加主键的示例。 这将首先使列不为空,然后将其添加为主键。

mysql>  ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);

您可以使用 ALTER 命令删除主键,如下所示:

mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;

要删除不是主键的索引,您必须指定索引名称。

显示索引信息

您可以使用 SHOW INDEX 命令列出与表关联的所有索引。 垂直格式输出(由 \G 指定)通常与此语句一起使用,以避免长行环绕 −

尝试以下示例

mysql> SHOW INDEX FROM table_name\G
........