zoukankan      html  css  js  c++  java
  • 第五章 索引管理及执行计划

    什么是索引

    1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容。

    2)让获取的数据更有目的性,从而提高数据库检索数据 的性能。

     

     索引类型

    1)BTREE:B+树索引(Btree  B+tree  B* tree)

    2)  HASH:HASH索引 hash key

    3)  FULLTEXT:全文索引

    4)RTREE:R树

    索引

    Btree

     

     1.优化了范围查询。

     2.在叶子节点添加了相邻的节点指针。

     

    索引的分类

    主键索引(primary key)

    普通索引  (key)

    唯一索引  (unique key)

    CREATE TABLE `test_table` (
    `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
    `DOMAIN_CODE` varchar(20) NOT NULL COMMENT '考试单位编号',
    `EXAM_NAME` varchar(300) NOT NULL COMMENT '考试名称',
    `EXAM_TYPE` int(1) NOT NULL COMMENT '考试类型(正式考试,补考)',
    `TARGET_EXAM_ID` bigint(20) DEFAULT NULL COMMENT '关联正式考试的ID(如果是补考,该处是必填)',
    `EXAM_PICTURE_PATH` varchar(100) DEFAULT NULL COMMENT '图示路径',
    `EXAM_BEGIN_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '考试开始时间',
    `EXAM_END_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '考试结束时间',
    `EXAM_TIME` int(3) NOT NULL COMMENT '考试时长',
    `EXAM_NEED_SCORE` int(5) NOT NULL COMMENT '考试所需积分',
    `EXAM_PAPER_TYPE` int(1) DEFAULT NULL COMMENT '考试试卷类型(0固定、1随机)',
    `EXAM_SCORE` double(6,2) DEFAULT NULL COMMENT '考试总分(关联试卷后回填)',
    `EXAM_PASS_SCORE` double(6,2) NOT NULL COMMENT '考试及格分',
    `EXAM_COMMIT_NUM` int(2) NOT NULL COMMENT '参考最大次数',
    `EXAM_STATUS` int(1) NOT NULL COMMENT '发布状态0未发布,1已发布',
    `EXAM_YEAR` varchar(5) NOT NULL COMMENT '年份',
    `EXAM_PAPER_ID` bigint(20) DEFAULT NULL COMMENT '关联试卷ID',
    `    EXAM_DISCRIPTION` varchar(1000) DEFAULT NULL COMMENT '考试备注',
    `OPERATOR_USER_ACCOUNT` varchar(20) NOT NULL COMMENT '修改人',
    `OPERATOR_TIME` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',
    `TARGET_DOMAIN_CODE` varchar(20) DEFAULT NULL COMMENT '发布目标单位编号(发布时回填)',
    `RANK` varchar(100) DEFAULT NULL COMMENT '职务级别(发布时回填)',
    `EXAM_DIPLOMA_ID` bigint(20) DEFAULT NULL COMMENT '关联证书',
    `DIPLOMA_NAME` varchar(200) DEFAULT NULL COMMENT '证书标题(关联证书后回填',
    `DIPLOMA_PICTURE_PATH` varchar(200) DEFAULT NULL COMMENT '证书背景图片保存位置(关联证书后回填)',
    `INDUSTRY_CODES` varchar(1000) DEFAULT NULL,
    `LANGUAGE` int(2) NOT NULL DEFAULT '1' COMMENT '试言(0:全部,1:汉试,2:维试,3:è’
    试,4:哈试)',
    `EXT1` int(1) NOT NULL DEFAULT '1' COMMENT '成绩计入学分的字段标识(0 是,1否)',
    `EXT2` int(3) DEFAULT NULL COMMENT '成绩所占比例',
    `EXT3` varchar(1) DEFAULT NULL,
    `EXT4` varchar(1) DEFAULT NULL,
    `EXT5` varchar(1) DEFAULT NULL,
    PRIMARY KEY (`ID`),
    KEY `DOMAIN_CODE` (`DOMAIN_CODE`),
    KEY `EXAM_PAPER_ID` (`EXAM_PAPER_ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=365 DEFAULT CHARSET=utf8;

    索引操作

    #创建普通索引
    mysql> alter table student2 add index idx_sname(sname);
    #创建主键索引
    mysql> alter table st add primary key pri_id(id);
    #创建唯一键索引
    mysql> alter table student2 add unique key uni_cometime(cometime);
    # 如何判断,该列是否能创建唯一键
    mysql> select count(sgender) from student2;
    mysql> select count(distinct(sgender)) from student2;
    #查看索引
    mysql> desc student2;
    mysql> show create table student2;
    mysql> show index from student2;

    前缀索引

    什么是前缀索引?
    以某个字段的前n个字符,创建索引.
    #删除索引
    mysql> alter table student2 drop index idx_sname;
    #创建前缀索引
    mysql> alter table student2 add index idx_sname2(sname(3));

    为什么要插入前缀索引

    如一篇文章:
    第一次写文章 紧张 ... 第二次写文章 不慌 ...
    给表中需要创建索引的大列上,推荐使用前缀索引。
    1.避免对大列建索引

    2.如果有,就使用前缀索引

    联合索引

    给多个字段创建一个索引
    为什么要使用联合索引?
    sex money body age hight weight face name phone QQ wechat
    create table xiangqin(
    id,
    name varchar(10),
    age int, money bigint,
    body varchar(10),
    hight int, weight int,
    face varchar(10),
    phone varchar(11),
    sex enum('f','m'));

    创建联合索引

    mysql> alter table xiangqin add index idx_all(sex,money,body,face);
    insert into xiangqin values('ly',30,999999999,'perfact',158,90,'nice','133','f'),
    ('qbl',58,1000000,'bad',150,150,'very bad','000','f'),
    ('wbq',50,9999999,'suibian',170,120,'suiyi',132,'m');
    #查询
    走索引

    #创建联合索引
    mysql> alter table xiangqin add index idx_all(sex,money,body,face);
    insert into xiangqin values('ly',30,999999999,'perfact',158,90,'nice','133','f'),
    ('qbl',58,1000000,'bad',150,150,'very bad','000','f'),
    ('wbq',50,9999999,'suibian',170,120,'suiyi',132,'m');

    #查询
    走索引
    mysql> select * from xiangqin where sex='f' and money>10000000 and body='perfact' and face='nice';
    
    
    不走索引
    mysql> select * from xiangqin where money>10000000 and body='perfact' and face='nice';
    mysql> select * from xiangqin where money>10000000 and body='perfact' and face='nice' and
    sex='f';
    alter table xiangqin add index idx_all(a,b,c,d);
    select * from xiangqin where a b c d
    a b c
    a b
    a c(部分走索引)
    a b d
    abdc
    bcd
    cd
    bd
    创建索引:
    1.不要在所有字段上都创建索引
    2.如果有需求字段比较多,选择联合索引
    3.如果有需求字段数据比较大,选择前缀索引
    4.如果可以创建唯一索引,一定创建唯一索引
    人的一生或多或少都在为一些事情努力着,有目标的人生是精彩的!朋友请不要在原地画圈圈,该行动了!
  • 相关阅读:
    HIVE之 Sqoop 1.4.6 安装、hive与oracle表互导
    Sqoop之 Sqoop 1.4.6 安装
    PIG之 Hadoop 2.7.4 + pig-0.17.0 安装
    hadoop之 node manager起不来, 执行mapreduce 程序hang住
    Maven 简介
    graphviz 的节点形状
    graphviz 的绘图布局
    Graphviz 的命令行参数说明
    golang使用graphviz
    IDEA 项目相关基础设置
  • 原文地址:https://www.cnblogs.com/ronglianbing/p/11805464.html
Copyright © 2011-2022 走看看