mysql索引的简介

1.索引是什么?

        官方定义:索引是帮助MySQL高效获取数据的数据结构,所以索引的本质是数据结构。
        当然还有一个更为简单的理解是:数据本身之外,数据库还维护这一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,
而这个数据结构就是索引。
        存储位置:因为索引本身也很好,因此不可能全部都放在内存中,往往都是以索引文件的方式存储在磁盘上。
        默认索引采用的算法:一般采用BTREE

2.索引的优势

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

3.索引的劣势

        1)实际上索引也是一张表,该表的主要内容就是保存索引的字段,并且指向具体表的记录,因此索引会占据空间。
        2)虽然索引可以提高查询速度,同时却会降低更新表的速度,如果对表进行insert、delete和update时,因为在这过程中,MySQL不仅要保存数据到具体表,也要保存索引文件。
        3)索引只是提高sql效率的一个因素,如何建立索引需要花费大量是时间建立适合的索引。

4.索引的分类

        1)单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。
        2)唯一索引:索引列的值必须唯一,但允许有空值。
        3)复合索引:一个索引包含多个数据表字段。(在高并发条件下,倾向建立复合索引)

5.基本语法

        1)创建索引
create [unique] index indexName on mytable(columnName(length));
alter mytable add [unique] index indexName(columnName(length));  ## 两种创建索引方式均可
        注意:如果是char,varchar类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定length。
        2)删除索引
drop index [indexName] on mytable;
        3) 查看表中索引
 show index from table_name;

6.需要建立索引的情况

        1)主键自动建立唯一索引
        2)频繁作为查询条件的表字段可以建立索引(where)
        3)查询中与其他表关联的表字段,即外键关系可以建立索引
        4)查询中排序的表字段,排序字段若通过索引的方式去访问将大大提高排序速度(order by)
        5)查询中统计或者分组的字段(group by)

7.不需要建立索引的情况 

        1)表记录太少(一般大于几十万、百万的情况,几百,几千,几万的情况,mysql内部的优化器是可以有极快的速度)
        2)经常增删改的表,原因详见索引的劣势第二条
        3)数据重复且分布平均的表字段,例如user表中的sex字段,因为一般只有三种形式:男、女和保密,因此这个字段就不适合当做索引字段
             其中可以通过一个方式简单的查询:  
SELECT COUNT(DISTINCT index_column)/COUNT(*) FROM table_name; -- index_column代表要添加前缀索引的列
            通过该查询得到的比值,比值越大,越有必要建立索引,效率越高
        4)where条件里用不到的字段不知何建立索引
        5) 频繁更新的字段不适合建立索引
 
备注:本文根据尚硅谷视频内容和资料进行简单归类,具体内容可以去尚硅谷官网学习,侵删!
posted on 2018-10-25 18:36  seizemiss  阅读(177)  评论(0编辑  收藏  举报