初学者都能看懂的MYSQL索引基础


>一位爱好技术的橘右京的哥哥橘左京

image

索引的作用

索引用于快速查找表中数据的值,若不使用索引Mysql就会进行逐行查找,数据量大的情况下效率极低;若使用索引,可快速达到位置进行查找,不会去查找无用数据,效率高。

索引就像书中的目录,可直接通过目录去查找内容所在页数,而不需要一页页的查找。

优势及劣势

优势

1).数据量大的情况下大大加快查询速度,降低数据据IO成本。
2).通过索引对数据进行排序,降低数据排序的成本,降低CPU消耗。

劣势

1).在新增、修改、删除时,索引也需要创建或维护,所耗费的时间也会增加。
2).索引实际上也是一张表,会存放到一个索引文件中,保存了主键和索引字段,并指向实体类的记录,所以索引也占用一定的空间,数据表中的数据会有最大上线设置,如果有大量的索引,可能数据表会更快到达上限值。

使用原则

合理使用索引,对于常用于查询的字段进行设置索引,对于经常更新的表避免使用太多的索引。若数据量较小也不必使用索引,可能不会起到作用。

索引主要分类

1).单值索引:一个索引只能包含一个列,一个表可以有多个单值索引。
2).唯一索引:索引列的值必须唯一,但允许有空值。
3).复合索引:即一个索引包含多个列

索引语法

创建索引
create [UNIQUE|FULLTEXT|SPATIAL] INDEX xd_dog_name [USING index_type] on dog
查看索引:
create index 索引名称 on 表名(字段名称)
删除索引:
show index from 表名
修改表索引:
drop index 索引名称 on 表名
为表中列添加一个主键索引。
alert table 表名 add primary key(字段名)
为表中列添加一个唯一索引(字段值必须唯一,可以有N个null)。
alert table 表名 add unique 索引名称(字段名)
为表中列添加一个普通索引。
alert table 表名 add index 索引名称(字段名称)
为表中列添加一个全文索引。
alert table 表名 add fulltext 索引名称(字段名称)

索引设计原则

1).对查询操作多且数据量大的表建立索引。
2).索引字段的选择最佳候选应当从where语句子条件提取。
3).索引并不是越多越好,尤其增删改操作越多,维护索引的成本就越高。
4).若有过多索引Mysql会出现选择困难症,虽然最后会选择一个有效的索引,但无疑增加了时间消耗。
5).使用唯一索引,区分度越高检索效率越高。
6).使用短索引,索引创建后也是用硬盘存储,可提升索引访问的IO效率,也可提升总体效率。
7).利用最左索引,使用复合索引创建的索引,只要包含创建时的第一个字段就可以使用索引。
如:id name age 搜索id的时候可使用索引、搜索ID Name的时候也可使用索引、搜索ID Name Age的时候也可以使用索引

新的一年新气象,new出对象不重样。
image

你可能感兴趣的