zoukankan      html  css  js  c++  java
  • mysql索引类型

    索引类型:

    1. 普通索引
    2. 唯一索引
    3. 主键索引
    4. 组合索引
    5. 全文索引

    1.普通索引

    最基本的索引,没有任何限制

    创建方式:

    CREATE INDEX `CODE_INDEX` ON `vanora_test` (`code`) USING BTREE;
    

      

    CREATE TABLE `vanora_test` (
    `code` varchar(20) NOT NULL,
    `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
    `Phone` varchar(15) DEFAULT NULL,
    INDEX `CODE_INDEX` (`code`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk

    删除索引:

    ALTER TABLE `vanora_test` DROP INDEX `CODE_INDEX` ;

    2.唯一索引

    类似普通索引,不同是:索引列必须唯一,单允许空值。如果是组合索引,则列值组合必须唯一
    创建方式:

    CREATE UNIQUE INDEX `CODE_INDEX` ON vanora_test(`code`);

      

    CREATE TABLE vanora_test_INDEX (
    `code` varchar(20) NOT NULL,
    `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
    `Phone` varchar(15) DEFAULT NULL,
    UNIQUE INDEX `U_INDEX` (CODE)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk

    删除索引

    ALTER TABLE `vanora_test` DROP INDEX CODE_INDEX

     

    3.主键索引

    特殊的唯一索引,一个表只能有一个主键,不允许有空值,一般在新建表的时候会同时创建主键索引

    创建方式:

    ALTER TABLE VANORA_TEST ADD PRIMARY KEY (CODE);
    CREATE TABLE vanora_test_INDEX (
    `code` varchar(20) NOT NULL,
    `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
    `Phone` varchar(15) DEFAULT NULL,
    PRIMARY KEY(`CODE`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gbk

    删除方式

    ALTER TABLE vanora_test DROP PRIMARY KEY;

    id是自增长的主键索引,删除时注意:

    CREATE TABLE `vanora_test` (
    
    `code` varchar(20) NOT NULL,
    
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `NAME` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
    `city_code` int(10) DEFAULT NULL,
    `Phone` varchar(15) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=gbk

    alter table vanora_test DROP PRIMARY KEY;(错误)
    alter table vanora_test DROP id;(直接删除字段)


    删除索引:
    alter table vanora_test modify id int(10) NOT NULL;(去掉自增)
    alter table vanora_test drop primary key;


    4.组合索引

    ALTER TABLE vanora_test ADD INDEX CODE_ID_INDEX (CODE,id);

    使用组合索引遵循最左前缀集合,比方索引是key index(a,b,c),这种索引支持a|a,b|a,b,c 三种组合查找,其他情况,组合索引没有用处
    复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。

    5.全文索引

    主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

    创建

    CREATE TABLE `full_table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    FULLTEXT (content)
    );
    ALTER TABLE full_table ADD FULLTEXT index_content(content);

    缺点

    1.提高了速度,但是降低了更细表的速度,更新表时,不仅要保存数据,还要保存一下索引文件
    2.建立索引会占用磁盘空间

    注意

    1.索引列不包含有null的值
    有null值的列不会被包含在索引中,组合索引只要有一列是null,组合索引无效


    2.使用短索引
    提高查询速度,节省磁盘空间


    3.索引列排序
    查询只使用一个索引,where使用了索引,order by中不再使用索引


    4.like
    like 'aa%' 使用了索引
    like '%aa' 没有使用索引


    5.在索引列进行运算,索引失效
    SELECT * FROM order WHERE DATE_FORMAT(Create_Time,'%Y%m%d')>='20190301' LIMIT 10;


    6.
    可以使用索引的:<,<=,=,>,>=,BETWEEN,IN
    可以使用索引的:<>,not in ,!=

  • 相关阅读:
    抓老鼠啊,亏了还是赚了
    币值转换
    2019春第七周作业
    2019春第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业
    2019年春季学期第二周作业
    在人生路上对我影响最大的三位老师
    第七周作业
  • 原文地址:https://www.cnblogs.com/vanoraxnc/p/10533497.html
Copyright © 2011-2022 走看看