zoukankan      html  css  js  c++  java
  • MySQL进阶语法

    1. create index

    格式:create「unique | fulltext | spatial」index「idx_name」on「tbl_name」(indexed_col_name, ...) [index_option]

    功能:创建新的索引

    选项和参数:

    indexed_col_name:col_name [(length)]

    index_option:

            key_block_size [=] value

            index_type

    index_type:

            using {BTREE | HASH}


    示例:

    create index idx_test1 on employee (sex, name);

    create unique index idx_test2 on employee (id, name) using BTREE;


    说明:

    ① create index被映射为alter table语句,用以创建索引。请注意,create index不能创建主键,创建主键需使用alter table;

    ② 通常应该在创建表的同时,即create table语句中,创建所需的全部索引。对于InnoDB表尤为如此,因为InnoDB表的主键决定了数据文件中行的物理布局。create index语句的作用是帮助你向已经存在的表中添加索引;

    ③ (col1, col2, ...)形式的列列表用于创建一个多列索引(组合索引),此时索引键的键值由所有列值组合而成;

    ④ 所有存储引擎都允许唯一索引在可为NULL的列上同时包含多个NULL值;

     支持空间数据类型(POINT和GEOMETRY)的存储引擎有:InnoDB, MyISAM, NDB和ARCHIVE;


    1.1 创建前缀索引

    对于字符串类型的列,可以使用值的前缀来创建索引

    语法:create index「idx_name」on「tbl_name」(col_name(length));

    参数:col_name(length)用于指定索引前缀长度

    优势:使用前缀索引可以使索引文件更小,这样可以节省大量磁盘空间,甚至还可以加速insert操作

    说明:

    ① 可以为char, varchar, binary和varbinary类型的列创建前缀索引;

    ② blob和text类型的列必须使用前缀索引;

    前缀限制以字节为单位。在create table, alter table, create index语句中,为非二进制字符串类型(char, varchar, text)指定的前缀长度被解释为字符长度;为二进制字符串类型(binary, varbinary, blob)指定的前缀长度则被解释为字节长度。在为多字节字符集的非二进制字符串类型的列指定前缀长度时,应考虑到这一点;

    ④ 是否支持前缀索引以及前缀索引的长度限制,与存储引擎有关。例如,正常情况下InnoDB表的前缀限制为767字节,如果开启innodb_large_prefix选项则可以长达3072字节;对于MyISAM表,前缀限制为1000字节;


    示例:

    create index idx_name on customer (name(10));

    该语句使用name列的前10个字符创建索引(假定name是非二进制字符串类型)


    1.2 索引的特性

    ◇ 全文索引:

    ① 只有MyISAM存储引擎支持全文索引;

    ② 索引列必须为char, varchar或者text类型;

    ③ 必须索引整个列,不能使用列前缀(前缀长度自动被忽略);


    ◇ 空间索引:

    ① 只有MyISAM存储引擎支持空间索引。为其它存储引擎指定空间索引将导致错误;

    ② 索引列不能为NULL;

    ③ 必须索引整个列,不能使用列前缀;


    ◇ 普通索引(非空间索引):

    ① 除ARCHIVE外,所有支持空间数据类型的存储引擎,都支持非空间索引;

    ② 除主键外,索引中的列可以为NULL;

    ③ 除POINT外,非空间索引中的空间列必须使用列前缀,必须指定列前缀长度,单位字节;

    ④ 非空间索引的索引类型取决于存储引擎,目前使用B-Tree;

    ⑤ 只有InnoDB, MyISAM和MEMORY存储引擎支持在可为NULL的列上添加索引;

    ⑥ 只有InnoDB和MyISAM存储引擎支持在blob和text类型的列上添加索引;


    1.3 索引选项

    在索引列列表之后,可以给出索引选项。index_option值可以为:

    ◇ key_block_size [=] value

    对于MyISAM表,key_block_size用于指定索引键的块大小,以字节为单位。该值仅为提示,如有必要,一个不同的大小将被使用。为单个索引定义指定的key_block_size值将覆盖表级别的key_block_size值

    InnoDB存储引擎不支持索引级别的key_block_size


    ◇ index_type

    某些存储引擎允许你在创建索引时指定索引类型,例如:

    create index id_test on lookup (id) using BTREE;

    下图显示了不同存储引擎允许支持的索引类型。在有多个索引类型的情况下,当没有显式给出索引类型说明符时,默认使用第一个。表中未列出的存储引擎不支持在索引定义中使用index_type子句


    index_type子句不能用于全文索引和空间索引。全文索引的实现依赖于具体的存储引擎。空间索引固定被实现为R-Tree

    如果你指定的索引类型对存储引擎无效,而另一索引类型对该存储引擎有效,且不影响查询结果,那么存储引擎将使用有效的索引类型

  • 相关阅读:
    文档浏览类的网站该如何设计?
    如何将动态生成Word文件
    Word 2007 文档结构图混乱
    Spring 配置 Spring JPA 发生错误的解决方法
    今天开始着手原来Office系统的重构
    Jetty入门
    推荐一个C语言学习教程
    博客园的第一天
    我与solr(一)--solr的配置与安装
    XML解析工具类
  • 原文地址:https://www.cnblogs.com/chaikefusibushiji/p/7475562.html
Copyright © 2011-2022 走看看