今天去面试一家互联网公司的时候,面试官问了我这样一个问题:
当用mysql查询大量数据,发现很慢时,你能有什么办法优化,我其中回答了一条是将查询条件建立索引加快查询速度,这时面试官反手一句那么创建索引有什么缺点,当时就有点懵了,只听说过创建索引加快查询速度,也没听说过有缺点啊,哈哈哈,所以下面给你们分享一下创建索引的优缺点。
在面试完后,其实也想过,如果没有缺点,那为何不把数据库的每个字段创建个索引呢?你说是吧?
下面我先来介绍一下

mysql创建索引的优点

  1. 建立索引的列可以保证行的唯一性,生成唯一的rowId
  2. 建立索引可以有效缩短数据的检索时间
  3. 建立索引可以加快表与表之间的连接
  4. 为用来排序或者是分组的字段添加索引可以加快分组和排序顺序

mysql创建索引的优点

  1. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
  2. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的空间。如果建立聚簇索引,那么需要的空间就更大。
  3. 当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度
    在看完优点和缺点之后,小伙伴们是不是又有问题了?这样看来哪些字段应该建立索引呢

哪些字段该建立索引呢?

相信在小伙伴们大致了解了mysql的优点和缺点之后,心里疑问又来了,那么哪些字段应该建立索引呢?

下面也给大家总结几点:
1. 表的主键和外键必须要有索引
2. 在经常搜索的列上,建立索引可以加快搜索速度
3. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
4. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引
5. 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引

创建索引的办法

最后,写出几种建立mysql中索引的方法:

1.primary key (主键索引)
 alter table table_name add primary key (‘列名’)
 2.unique或 unique key(唯一索引)
 alter table table_name add unique(‘列名’)
 3.index(普通索引)
 alter table table_name add index index_name (‘列名’)
 4.fulltext(全文索引)
 alter table table_name add fulltext(‘列名’)
 5.聚簇索引(多列索引)
 alter table table_name add index index_name(‘列名1’,‘列名2’,‘列名3’)

总结

第一次写博客,借鉴了许多其他博主的内容,并且写的也不是很好,内容不完整或者有错的希望朋友们指出,最后希望大家都能顺利通过面试,拿到一个好的offer!