索引的基本使用与创建选择

如果我们查询的表里面有千万条数据,这时如果我们获取其中一条数据的详细信息,在没有建立索引和使用索引他们的查找时间是不相同的

举例:

  如果当我们的表中有以下字段(id   name   age),并且id作为主键,这时如果我们查找id,会发现查询数据非常的快(已知表中有几千条数据)

select id FROM emp WHERE id=100;

  但是如果我们直接查找年龄会发现,需要查找很久的时间

select age FROM emp WHERE age=20;

  这个时候我们就要考虑为age建立一个索引(由于表自身就很大,所以创建索引也要花费一定的时间)

CREATE INDEX age_idx ON emp(age);

  这样再次执行第二个语句就会发现执行速度变快许多,并且我们使用查看索引的语句后会发现    Index_type为BTREE类型

索引的使用方式:

  创建索引:

    create [UNIQUE] index 索引名称 ON 表名(字段(长度))
    alter 表名 add [unque] index[索引名称] on(字段(长度))

  查看索引:

    show index from 表名

  删除索引:

    drop index[索引名称] on 表名

  更改索引:

    alter table tab_name add primary key(column_list)        添加一个主键,索引必须是唯一索引,不能为NULL

    alter table tab_name add unque index_name(column_list)      创建的索引是唯一索引,可以为NULL

    alter table tab_name add index index_name(column_list)       普通索引,索引值可出现多次

    alter table tab_name add fulltext index_name(column_list)     全文索引

何时选择创建索引:

  适合建立索引的情况:

    1.主键自动建立唯一索引

    2.频繁作为查询条件的字段应该创建索引        比如银行系统银行帐号,电信系统的手机号

    3.查询中与其它表关联的字段,外键关系建立索引      比如员工,部门外键

    查询中排序的字段,排序的字段若通过索引去访问将大提升排序速度    索引能够提高检索的速度和排序的速度

    查询中统计或分组的字段      分组的前提是必排序

  不适合建立索引的情况:

    where条件里用不到的字段不建立索引

    记录比较少的表

    需要经常增删改的表

      索引提高了查询的速度      同时却会降低更新表的速度,如果对表的INSERT,UPDATE和DELETE
      因为建立索引后, 更新表时, MYSQL不仅要保存数据,还要保存一下索引文件

    数据重复的表字段

      如果某个数据列包含了许多重复的内容,为它建立索引 就没有太大在的实际效果
      比如表中的某一个字段为国籍,性别   数据的差异率和重复率不高,这种建立索引就没有太多意义

       频繁更新的字段不适合建立索引
      每次更新不单单更新数据,还要更新索引

如果你需要学习详细的mysql数据库优化,可以点击这里查看    https://ke.qq.com/webcourse/index.html#cid=401461&term_id=100478781&taid=3417419578482741&vid=z143135ztlm

 

posted @ 2019-06-28 11:39  瞳孔冷色  阅读(518)  评论(0编辑  收藏  举报