索引是为了减少查询次数而出现的概念
索引在一定程度增加了查询的速度,但是也会降低增删改的速度,因为有了索引之后,再添加或者删除时,就必须同时修改用于
标记索引的文件
顺便说个面试题,大数据SQL文件换数据库时,如何快速导入?
1.删除空表的索引
2.集中导入数据
3.数据导入完毕后,再集中创建索引
因为如果一条一条创建索引,那会很慢,集中创建缺速度却很快
MySQL索引算法分为 二叉树 和 hash 索引 二叉树可以把查询次数降低到 log2N ,例如从 1 2 3 4 5 6 7 获取到 4 (后面的全文索引是一种特殊的算法。)
二叉树会把其分为
4
2 6
1 3 5 7
hash 理论上可以1次就查询到,原理是先为每个值算出一个hash值,然后再分配空间,查询的时候,也是先算出要查询的hash值,然后直接去对应的空间
获得值.
MySQL索引主要分为
普通索引 : 单纯的加快查询速度
唯一索引 :指定的列上不能出现重复的值,一张表上可以有多个唯一索引的列
主键索引:主键不能重复,一张表上只能有一个主键索引
全文索引:fulltext index (只可作用于MyISAM 引擎的表,现在大多都是INNODB引擎,这个就不说了) 对中文意义也不大,mysql很难为其建立索引
mysql5.5以后innodb也支持
停止词是针对全文索引说的,全文索引的字段一般都是一段比较长的文本,比如
I AM FROM CHINA, I LIKE ZHOUXINGXING . 停止词值比较常出现的单词或文字,比如 is am i 的这些,这些MySQL是不会为期加入什么索引的,称为停止词
查询所引的语法 show index from 表名; \G
KEY_NAME :PRIMARY 为主键索引
Column_Name 作用在那一列上
INDEX_TYPE 索引算法 BTREE是 二叉树
添加索引 alter table 表名 add index 索引名(列名); 索引名不写默认为列名
(index -普通索引 unique-唯一索引 fulltext-全文索引 primary-主键索引)
为book的title 加了普通索引后 alter table book add index title(title); 再查询表格,如下图所示
删除索引 alter table 表名 drop index 索引名;
alter table 表名 drop index primary key ; 删除主键比较特别
索引使用场景
不要过度索引
不要索引太集中的值
例如 男和女
索引尽量索引散列的值,在where 后面的字段考虑索引
完~~~