Mysql Documentation 阅读笔记: 索引 Index

Index

Create Index

Grammar

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option]
    [algorithm_option | lock_option] ...

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'

algorithm_option:
    ALGORITHM [=] {DEFAULT|INPLACE|COPY}

lock_option:
    LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
  • CREATE INDEX 不能用来创建PRIAMARY_KEY,如果需要创建PRIMARY_KEY需要使用ALTER TABLE;

  • 通常在建表的时候(CREATE_TABLE)中创建索引,在InnoDB引擎中,PRIMARY_KEY决定了行在数据文件里的物理格局(似乎更主张在建表的时候指定索引和主键之类的属性)。

  • 可以基于多列创建索引。

  • 对String类型的列创建索引时需要注意的:

    • 可以为String类型的列(CHAR,VARCHAR, BINARY, VARBINARY)指定前缀索引。
    • Prefixes must be specified for BLOB and TEXT column indexes.
    • 由于String型的列有不同的数据类型,而且又有不同的长度,所以为String列建索引的时候需要考虑到前缀长度。
    • 空间类型的列不能建索引。(TODO)
    • 如果一个某一个string列中,它们大部分行都能以前10个字符来区分开彼此,那么这个索引的速度不会比整个列长度的索引慢很多(实际应该也存在这种情况,比如身份证号若存于19长度的字符,或许在一定数量级下,以前9位建索引跟以19为建索引的效率相差不明显),更短的索引长度会节省更多的磁盘空间,同时会提高INSERT操作的执行速度。
  • MySQL Cluster formerly supported online CREATE INDEX operations using an alternative syntax that is no longer supported.

  • UNIQUE 唯一索引:

    • 唯一索引限定了一个约束条件:被索引的列必须是唯一的(不重复的),如果插入一行与已经存在的某一行数据的索引是相同的,这时候会报错
    • 所有的Mysql引擎里,唯一索引允许它索引的行为NULL值(前提是该行允许存储NULL值);
    • 如果为一列指定前缀唯一索引,那么必须保证这一列的值在前缀长度内为唯一。

A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index permits multiple NULL values for columns that can contain NULL. If you specify a prefix value for a column in a UNIQUE index, the column values must be unique within the prefix.

  • FULLTEXT 全文索引:
    • FULLTEXT indexes are supported only for InnoDB and MyISAM tables and can include only CHAR, VARCHAR, and TEXT columns.
    • Indexing always happens over the entire column;
    • column prefix indexing is not supported and any prefix length is ignored if specified.

For more reference:

    原文作者:JennyGump
    原文地址: https://www.jianshu.com/p/8909399b4aa3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞