zoukankan      html  css  js  c++  java
  • mysql创建索引

     

    1.创建普通索引
     
    创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数。
     
     下面创建一个表名为index1的表,在表中的id字段上建立索引。SQL代码如下:

    CREATE  TABLE  index1 (id    INT , 
    name   VARCHAR(20) , 
    sex    BOOLEAN , 
    INDEX ( id) 
    );

    运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

    复制代码
    mysql> SHOW CREATE TABLE index1 G 
    *************************** 1. row *************************** 
           Table: index1 
    Create Table: CREATE TABLE `index1` ( 
      `id` int(11) DEFAULT NULL, 
      `name` varchar(20) DEFAULT NULL, 
      `sex` tinyint(1) DEFAULT NULL, 
      KEY `index1_id` (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    复制代码

     
    2.创建唯一性索引
     
    创建唯一性索引时,需要使用UNIQUE参数进行约束。
     
    下面创建一个表名为index2的表,在表中的id字段上建立名为index2_id的唯一性索引,且以升序的形式排列。SQL代码如下:

    CREATE  TABLE  index2 (id    INT  UNIQUE , 
    name   VARCHAR(20) , 
    UNIQUE  INDEX  index2_id ( id  ASC) 
    );

    运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

    复制代码
    mysql> SHOW CREATE TABLE index2 G 
    *************************** 1. row *************************** 
           Table: index2 
    Create Table: CREATE TABLE `index2` ( 
      `id` int(11) DEFAULT NULL, 
      `name` varchar(20) DEFAULT NULL, 
      UNIQUE KEY `id` (`id`), 
      UNIQUE KEY `index2_id` (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    复制代码

    结果可以看到,id字段上已经建立了一个名为index2_id的唯一性索引。这里的id字段可以没有进行唯一性约束,也可以在该字段上成功创建唯一性索引。但是,这样可能达不到提高查询速度的目的。
     
     
    3.创建全文索引
     
    全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。而且,现在只有MyISAM存储引擎支持全文索引。
     
    下面创建一个表名为index3的表,在表中的info字段上建立名为index3_ info的全文索引。SQL代码如下:

    CREATE  TABLE  index3 (id    INT  , 
    info   VARCHAR(20) , 
    FULLTEXT  INDEX  index3_info ( info ) 
    )ENGINE=MyISAM;

    运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

    复制代码
    mysql> SHOW CREATE TABLE index3 G 
    *************************** 1. row *************************** 
           Table: index3 
    Create Table: CREATE TABLE `index3` ( 
      `id` int(11) DEFAULT NULL, 
      `info` varchar(20) DEFAULT NULL, 
      FULLTEXT KEY `index3_info` (`info`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    复制代码

    结果可以看到,info字段上已经建立了一个名为index3_info的全文索引。如果表的存储引擎不是MyISAM存储引擎,系统会提示"ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes"。
     
    注意:目前只有MyISAM存储引擎支持全文索引,InnoDB存储引擎还不支持全文索引。因此,在创建全文索引时一定注意表的存储引擎的类型。对于经常需要索引的字符串、文字数据等信息,可以考虑存储到MyISAM存储引擎的表中。
     
    4.创建单列索引
     
    单列索引是在表的单个字段上创建索引。
     
     下面创建一个表名为index4的表,在表中的subject字段上建立名为index4_st的单列索引。SQL代码如下:

    CREATE  TABLE  index4 (id    INT  , 
    subject   VARCHAR(30) , 
    INDEX  index4_st ( subject(10) ) 
    );

    运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

    复制代码
    mysql> SHOW CREATE TABLE index4 G 
    *************************** 1. row *************************** 
           Table: index4 
    Create Table: CREATE TABLE `index4` ( 
      `id` int(11) DEFAULT NULL, 
      `subject` varchar(30) DEFAULT NULL, 
      KEY `index4_st` (`subject`(10)) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    复制代码

    结果可以看到,subject字段上已经建立了一个名为index4_st的单列索引。细心的读者可能会发现,subject字段长度为20,而index4_st索引的长度只有10。这样做的目的还是为了提高查询速度。对于字符型的数据,可以不用查询全部信息,而只查询其前面的若干字符信息。
     
    5.创建多列索引
     
    创建多列索引是在表的多个字段上创建一个索引。
     
     下面创建一个表名为index5的表,在表中的name和sex字段上建立名为index5_ns的多列索引。SQL代码如下:

    CREATE  TABLE  index5 (id  INT  , 
    name   VARCHAR(20) , 
    sex   CHAR(4) , 
    INDEX  index5_ns ( name, sex ) 
    );

    运行结果显示创建成功,使用SHOW CREATE TABLE语句查看表的结构。显示如下:

    复制代码
    mysql> SHOW CREATE TABLE index5 G 
    *************************** 1. row *************************** 
           Table: index5 
    Create Table: CREATE TABLE `index5` ( 
      `id` int(11) DEFAULT NULL, 
      `name` varchar(20) DEFAULT NULL, 
      `sex` char(4) DEFAULT NULL, 
      KEY `index5_ns` (`name`,`sex`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    复制代码
  • 相关阅读:
    jdbc读取数据库表
    java中byte和blob互转
    mysql解决错误的方法-MySQL日志
    源码编译配置lnmp部署zabbix
    ssh后门反向代理实现内网穿透
    Cisco、HUAWEI、H3c、Firewall等设备配置snmp
    zabbix通过snmp监控网络设备
    centos/linux扩容Swap分区
    fork炸弹
    解决You have new mail in /var/spool/mail/root提示
  • 原文地址:https://www.cnblogs.com/treasury/p/12652444.html
Copyright © 2011-2022 走看看