mysql组合索引 唯一_(四):MySQL建立索引,唯一索引和组合索引

本文介绍了在MySQL中如何建立索引,特别是针对大数据量表的组合索引优化。通过实例展示了一条SQL查询在建立组合索引前后的性能提升,同时讨论了索引带来的批量插入数据时的效率问题及解决方案,包括在低峰时段重建索引以减少对查询的影响。最后提出了使用`EXPLAIN SQL`进行查询分析和性能优化的重要性。
摘要由CSDN通过智能技术生成

# (四):MySQL建立索引,唯一索引和组合索引

先大致介绍下项目的数据库信息。

数据库A:主要存放的通用的表,如User、Project、Report等。

数据库B、C、D:一个项目对应一个数据库,而且这几个项目的表是完全一样的。

**数据库表的特点**

A中的表:数据量几乎都比较小,比如User表中用户数,顶多也就几百上千。

B中的表:X/Y/Z 3张表几乎是确定的,Data表 中的数据量比较大,几千万到上亿。

周期性的会加入一大批数据,比如,每月末增加几百万条数据。

即一般情况下,B中的表只有查询操作,而且特别是Data查询频繁且数据量很大。

**建立索引**

1.为所有的表建立了唯一索引,索引字段是主键id。

2.考虑到数据库A中表的数据量很小,暂时没有建立组合索引。

如有可能,对频繁查询的表和字段,后期尝试加入组合索引。

3.对Data表建立组合索引。

频繁查询的一条SQL语句

select  from Data where projectId=? and (inputVersion in (201)) and (sideId in (10001)) and (breakId in (?)) and (periodId in (?))  order by id desc;

建立组合索引的语句

**ALTER TABLE Data ADD INDEX data_query_index (projectId,inputVersion,sideId,breakId,periodId);**

**建立索引之前,需要花费2.796秒。**

**建立索引之后,只需要0.136秒。**

可以说是,大幅度提升了查询效率。

**索引的弊端**

随之而来的问题:如果已经建立了索引,那么批量增加数据的时候,会特别慢。

一种较快的方法是:批量插入数据之前,先删除索引,提高批量插入数据的效率。

然后,再重新建立索引,提高查询效率。

1000万条记录,重建5个字段的组合索引需要2到3秒。

重建索引的问题是,这个过程中,查询会比较慢。

应对之策:导入数据,重建索引 应该选择 晚上/凌晨等用户较少使用系统的时间段。

**一个建议**

用 explain sql;

可以分析sql语句的执行情况,进而对sql语句进行优化。

**天下武功,唯勤不破**

性能优化,以前只是看过一些书,没啥实践经验。

最近项目需要由我来进行优化,只好硬着头皮一点点去实践。

网上搜资料、请教同事、请教大牛。

周末再多看看书,认真复习和学习Linux、MySQL、Tomcat、Redis等一大堆,先侧重系统优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值