# (四):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等一大堆,先侧重系统优化。

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

  1. mysql中对一个表的id建立了唯一索引,那么查询的select count(*) ,select count(1) ,select count(id),select count(列名)

    1.mysql中对一个表的id建立了唯一索引,那么查询的select count(*) ,select count(1) ,select count(id),select count(列名) 的查询结 ...

  2. Mysql 唯一索引长度_关于mysql索引长度的相关内容总结

    MySQL优化之-索引具体代码分析:索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存 ...

  3. mysql explain详解_数据库mysql(1)——B+TREE索引原理

    一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...

  4. mysql not exists无效_分析MySQL中哪些情况下数据库索引会失效

    要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain. 一.explain 用法:explain +查询语句. id:查询语句的序列号,上面图片中只有一个selec ...

  5. mysql版本的索引类型_【mysql】索引 回表 覆盖索引 索引下推

    索引类型 索引类型分为主键索引和非主键索引.(一定要牢记,是怎么存储数据的) 主键索引的叶子节点存的是整行数据.在 InnoDB 里,主键索引也被称为聚簇索引(clustered index). 非主 ...

  6. mysql索引失效_导致MySQL索引失效的几种常见写法

    最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用的易于 ...

  7. like左匹配索引失效_导致MySQL索引失效的一些常见写法总结

    前言 最近一直忙着处理原来老项目遗留的一些SQL优化问题,由于当初表的设计以及字段设计的问题,随着业务的增长,出现了大量的慢SQL,导致MySQL的CPU资源飙升,基于此,给大家简单分享下这些比较使用 ...

  8. mysql mvcc 隔离级别_关于 Mysql 四种隔离级别中 Lock 和 MVCC 的关系

    读写锁 共享锁(share lock)| 读锁(read lock) 读锁是共享的,或者说是相互不阻塞的.多个客户在同一时刻可以同时读取同一个资源,而互不干扰 SELECT ... LOCK IN S ...

  9. mysql聚合索引创建_为 MySQL 查询优化选择最佳索引

    我们的许多用户.开发者和数据库管理员不断向我们的团队咨询有关 EverSQL 的索引推荐算法.所以,我们决定写一些这方面的内容. 本教程不会详细介绍该算法的所有内部特性,而是要简单地说明索引最重要的方 ...

最新文章

  1. 深度工作,打工人的必备指南!
  2. html服务器显示,html显示服务器盘符
  3. 【深度学习】模式识别技术探索之决策树(Decision tree)
  4. 少儿python编程培训-无锡江阴少儿Python编程培训一对一
  5. 按键精灵 getcursorpos没有用_给你们想要的一键输出II按键精灵脚本开发教程
  6. Nacos-快速入门
  7. root 链接ftp
  8. java war包混淆_使用proguard混淆java web项目代码
  9. 使用webpack引入sass全局变量
  10. 【ArcGIS|空间分析|网络分析】5 计算服务区和创建 OD 成本矩阵
  11. 在sv testbench中加checker的几种办法
  12. scrapy爬虫-美图录
  13. Win10-Ubuntu双系统
  14. VMware软件虚拟机不能全屏
  15. kfc小程序_利用实验室成长的“未来之肉”将肯德基转换为3D打印鸡肉
  16. Python中万年历的代码实现
  17. 如何使用Google云端硬盘备份和还原WhatsApp消息
  18. finalize()介绍
  19. 最优化方法:八、多目标优化
  20. HCIP实验:MPLS VPN配置

热门文章

  1. Unity安卓本地推送
  2. CSS 精灵(雪碧图、精灵图)
  3. 用C++和SFML写游戏-Game类的创建(2)
  4. oracle 文件头格式,ORACLE 11G 数据文件头格式
  5. 计算机专业就业前景和发展方向的就业论文,从电子信息工程谈就业趋向和发展方向论文.doc...
  6. Kali Linux SQL注入攻击教程
  7. 空调匹数与制冷量及适用面积
  8. indesign排版标点挤压_用indesign排版,一本书中,用同一种标点挤压设置,前面部分是对齐的,后面的不知道对不齐是怎么回事啊?????...
  9. 电商直播”“国潮”火到国外 这些中式表达用英语怎么翻译?
  10. MyBatisPlus的时间段和模糊查询