zoukankan      html  css  js  c++  java
  • 索引的基本使用与创建选择

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

    举例:

      如果当我们的表中有以下字段(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

  • 相关阅读:
    springboot 无法访问静态资源
    webrtc源码阅读理解一
    c++ include的顺序重要吗?
    简说yuv
    i420 转 nv21
    ffmpeg mp4 转 yuv、 y4m转yuv、mp4转y4m && ffplay 播放y4m、yuv
    mysql 查询json字符串条件
    Webpack4.X中sourcemap的配置 详解
    webpack如何打包生成的map文件不生效?
    vue中使用setInterval,移入暂停,移出继续
  • 原文地址:https://www.cnblogs.com/pcliu/p/11101806.html
Copyright © 2011-2022 走看看