暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库索引对业务速度影响有多大?

信息化漫谈 2019-10-16
387
某采用云数据库的网站用户反映业务访问速度很慢,查询一条数据库的数据时间很长,怀疑是云数据库的性能问题,为此引出了今天的讨论课题。

一、问题判断及处理
经过与用户的交流,该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类产品更是如此,掌握一些必要的技能将更有信心与客户进行能落地的业务交流。
索引对于物联网应用的数据检索非常重要,在上亿条数据中进行数据的操作,如果没有索引的帮助,很难想象,结果什么时候能呈现出来!
文章转载自信息化漫谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论