美文网首页mysqlMySQL学习MySQL
Mysql Documentation 阅读笔记: 索引 Ind

Mysql Documentation 阅读笔记: 索引 Ind

作者: JennyGump | 来源:发表于2017-01-04 00:04 被阅读49次

    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:

    相关文章

      网友评论

        本文标题:Mysql Documentation 阅读笔记: 索引 Ind

        本文链接:https://www.haomeiwen.com/subject/ryxovttx.html