MySQL 索引

  • 索引

    数据库索引是一种数据结构,可以提高表中操作的速度。可以使用一列或多列创建索引,这为快速随机查找和对记录访问的有效排序提供了基础。创建索引时,应考虑将所有列都用于进行SQL查询并在这些列上创建一个或多个索引。实际上,索引也是表的一种,保留主键或索引字段以及指向实际表中每个记录的指针。用户看不到索引,它们仅用于加速查询,并且数据库搜索引擎将使用它们非常快速地定位记录。INSERTUPDATE 语句在具有索引的表上花费更多时间,而SELECT语句在那些表上变得很快。原因是在进行插入或更新时,数据库也需要插入或更新索引值。
  • 简单唯一索引

    您可以在表上创建唯一索引。唯一索引意味着两行不能具有相同的索引值。这是在表上创建索引的语法。
    CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
    您可以使用一个或多个列来创建索引。例如,我们可以使用tutorial_author在tutorials_tbl上创建索引。
    CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)
    您可以在表上创建一个简单的索引。只需从查询中省略UNIQUE关键字即可创建一个简单的索引。简单索引允许表中有重复值。如果要按降序索引列中的值,可以在列名后添加保留字DESC
    mysql> CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author DESC)
  • ALTER命令添加和删除INDEX

    有四种类型的语句可向表添加索引
    • 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_name(column_list) - 这将添加一个普通索引,其中任何值都可能出现多次。
    • ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list) - 这将创建一个特殊的FULLTEXT索引,该索引用于文本搜索。
    以下代码块是在现有表中添加索引的示例。
    mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
    您可以使用DROP子句以及ALTER命令删除任何INDEX 。尝试以下示例删除上面创建的索引。
    mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
    您可以使用DROP子句以及ALTER命令删除任何INDEX。
  • ALTER命令添加和删除PRIMARY KEY

    您也可以以相同的方式添加主键。但是,请确保主键可以在非NULL的列上使用。以下代码块是在现有表中添加主键的示例。这将使列NOT NOT NULL首先,然后将其添加为主键。
    mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
    mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
    您可以使用ALTER命令来删除主键,如下所示:
    mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
    要删除不是PRIMARY KEY的索引,必须指定索引名称。
  • 显示索引信息

    您可以使用SHOW INDEX命令列出与表关联的所有索引。垂直格式输出(由\G指定)通常在此语句中很有用,以避免长行换行
    尝试以下示例
    mysql> SHOW INDEX FROM table_name\G