zoukankan      html  css  js  c++  java
  • mysql的索引

    什么是索引

    1. 帮助Mysql高效获取数据的数据结构
    2. 索引就是数据结构
    3. 类似新华字典的索引目录,可以通过索引目录快速查到你想要的字
    4. 排好序的快速查找数据

    为什么要建立索引

    1. 提高查询效率 没有排序之前一个一个往后找 通过索引进行排序之后,可以直接定义到想要的位置
    2. 排好序的快速查找数据结构-->就是索引

    优势

    1. 索引类似大学图书馆建立的书目索引,提高数据检索的效率,降低数据库的IO成本
    2. 通过索引对数据项进行排序,降低数据排序成本,降低了CPU的消耗

    劣势

    1. 一般来说, 索引本身也很大, 索引往往以文件的形式存储到磁盘上
    2. 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录.所以索3引也是要占磁盘空间的
    3. 虽然索引提高了查询速度,但是会降低更新表的速度.
    4. 因为更新表时, MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,
    5. 会调整因为更新所带来的键值变化后索引的信息

    索引分类

    1. 单值索引
      一个索引只包含间个列,一个表可以有多个单值索引 一般来说, 一个表建立索引不要超过5个
    2. 唯一索引 索引列的值必须唯一,但允许有空值
    3. 复合索引 一个索引包含多个列
    4. 全文索引
      MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索, 可以利用全文索引来提高匹配的速度。

    索引为什么能快速查找数据

    1. 二叉查找树
    2. B-Tree
    3. B+Tree

    基本语法

    创建索引

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

    查看索引

    show index from 表名
    

    删除索引

    drop index[索引名称] on 表名
    

    更改索引

    添加一个主键,索引必须是唯一索引,不能为NULL

    alter table tab_name add primary key(column_list)
    

    创建的索引是唯一索引,可以为NULL

    alter table tab_name add unque index_name(column_list)
    

    普通索引,索引值可出现多次

    alter table tab_name add index index_name(column_list)
    

    全文索引

    alter table tab_name add fulltext index_name(column_list)
    

    索引建立选择

    适合建立索引

    1. 主键自动建立唯一索引
      primary
    2. 频繁作为查询条件的字段应该创建索引
      比如银行系统银行帐号,电信系统的手机号
    3. 查询中与其它表关联的字段,外键关系建立索引
      比如员工,部门外键
    4. 频繁更新的字段不适合建立索引
      每次更新不单单更新数据,还要更新索引
    5. where条件里用不到的字段不建立索引
      查询中排序的字段,排序的字段若通过索引去访问将大提升排序速度
      索引能够提高检索的速度和排序的速度
      查询中统计或分组的字段
      分组的前提是必排序
  • 相关阅读:
    Docker 容器相关命令
    Docker 镜像相关命令
    Docker 守护进程相关命令
    VMware Workstation 报w32authconnectionlaunch:readfile失败
    关于 Vue Baidu Map 自动定位
    前端面试题第一天
    记录一下使用element ui使用级联选择器的坑,级联选择器的默认选中
    判断值得类型,以及判断对象是否为空对象
    js计算两个时间差
    关于axios请求携带cookie以及封装
  • 原文地址:https://www.cnblogs.com/joker-dj/p/12822053.html
Copyright © 2011-2022 走看看