数据库索引对业务速度影响有多大?
- 2019 年 11 月 28 日
- 筆記
某采用云数据库的网站用户反映业务访问速度很慢,查询一条数据库的数据时间很长,怀疑是云数据库的性能问题,为此引出了今天的讨论课题。
一、问题判断及处理
经过与用户的交流,该MySQL云数据库的单表目前数据量达到了超100W条,而该表并未启用索引功能,查询某数据的时间为6.32秒。

我们协助用户对数据表进行索引设计后,查询同样数据的时间达到了ms毫秒级。

二、数据库索引的好处
1、大大加快数据的查询数据,这是最主要的原因。
2、在使用group分组或desc排序子句进行数据查询时,显著减少时间。
三、数据库索引的不利
1、占用磁盘空间。得到了查询速度,牺牲了磁盘空间。创建索引后,将为某列建索引,并将占用额外空间。
2、影响数据操作效率。insert、delete、update语句操作时,每次对索引列进行修改操作,均会同步修改索引文件,这将降低数据的维护速度。
3、创建、数据索引也将耗费时间。该时间随着数据量的增长所耗费的时间也会增加。如下图,为100W的数据库创建单列索引,用时12秒。

四、数据库索引的设计原则
1、索引并非越多越好。每增加一个索引列,就多占用磁盘,并影响insert、update语句性能。
2、避免对经常更新的表进过多的索引,索引中的列尽可能少。
3、数据量小的表最好不用索引。
4、在不同值较多的列建立索引。如性别列,只有“男”、“女”,没有必要建立索引。
五、建立索引实战测试
1、创建一个带索引的数据表
以下数据表,name带索引
mysql> create table t5 (
-> id int(11) not null,
-> name char(5) not null,
-> index(name));
Query OK, 0 rows affected (0.02 sec)
2、检查索引是否生效
以索引列为查询条件,索引生效
mysql> explain select * from t5 where name='mx' G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t5
partitions: NULL
type: ref
possible_keys: name
key: name
key_len: 5
ref: const
rows: 1
filtered: 100.00
Extra: NULL
1 row in set, 1 warning (0.00 sec)
六、小结
服务商提供云业务后,与用户的故障边界越来越模糊,对于paas类产品更是如此,掌握一些必要的技能将更有信心与客户进行能落地的业务交流。
索引对于物联网应用的数据检索非常重要,在上亿条数据中进行数据的操作,如果没有索引的帮助,很难想象,结果什么时候能呈现出来!