其实项目应用的瓶颈还是在db端,在只有少量数据及极少并发的情况下,并不需要多少的技巧就可以得到我们想要的结果,但是当数据量达到一定量级的时 候,程序的每一个细节,数据库的设计都会影响到系统的性能。这里就数据库开发及优化的话题和大家做个讨论和分析,也请大家完善,这里就以下几个话题,我先 发表自己的见解。

1.存储引擎的选择

2.索引的设计及使用

3.大批量插入时SQL语句的优化

存储引擎的选择

声明:本文所针对的数据库版本都是MYSQL 5这里我主要针对两种存储引擎进行简单比较分别是MyISAM和InnoDB,首先比较下区别:

1. MyISAM不支持事务,不支持外键,优点是访问速度高,批量插入速度快。假设大量的操作是select、insert,建议采用该存储引擎。但是在我的实际应用中,出现过批量插入过于频繁的时候,当数据量到达一定级别,出现表损坏的情况。

2. InnoDB支持事务处理,但是相对于前者,处理效率低一些,并且其索引及数据也更占用磁盘空间。在存储一些关键数据,并需要对其进行事务操作的时候,我们可以选择innodb,当然,我认为他不应该是访问量太大的。

索引的设计及使用

没有索引的表是恐怖的,除非里头没多少数据,但是怎么设计索引是合理的?恐怕不是所有人都明白,这里简要分析下索引的设计及使用。

1. 索引通常是设置where字句中的列,如果你设置select后的列,这是没有任何意义的。当然你需要对某列进行排序,order by后的列也是可以建成索引的。

2. 使用唯一索引,主键就是最好的例子,假设你建的索引列,大量都是重复的,例如:性别,那么这样的索引并不会加快搜索速度。至于为什么,请大家自行了解索引的工作原理。

3. 只要有可能,就要尽量限定索引的长度,例如索引列为 char(100),在其前10个字符大部分都是唯一的,请设置索引的长度为10,使用短索引可以加快查询速度,并节省硬盘空间。

4. 索引的左前缀特性,联合索引实质上也是建立了多个的索引,那么是建立联合索引好还是分别建多个索引好呢?显然前者更好,利用左前缀特性,只要联合索引的最左的列被用到,那么索引都会被使用。

5. 当然,最后要说的是,不要过度使用索引,索引越多,插入的速度越慢,尤其到数据量庞大时,同时,大量的索引将耗费很多硬盘空间,造成不必要的浪费。

mysql 显示前三项_详解MySQL三项实用开发知识相关推荐

  1. mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法

    我们行MGR年底要上线了,每天都要看官方文档学习,做测试,坚持每天写一个小知识点,有想一起学习的么~ MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_on ...

  2. mysql如何查看事务日记_详解 Mysql 事务和Mysql 日志

    事务特性 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节. 2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破 ...

  3. mysql影响行数解析_详解MySQL的数据行和行溢出机制

    一.行 有哪些格式? 你可以像下面这样看一下你的mysql行格式设置. 其实mysql的数据行有两种格式,一种就是图中的 compact格式,还有一种是redundant格式. compact是一种紧 ...

  4. mysql分区表truncate分区数据_详解MySQL分区表

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

  5. mysql如何进行压测_详解MySQL如何按表创建千万级的压测数据

    有时我们要对系统做压测,或者数据库压力测试,这时候需要对某些表插入几百万或者上千万数据,下面介绍下怎么利用MySQL循环和存储过程对特定表的创建千万行数据. 1. 准备测试表 CREATE TABLE ...

  6. mysql内连接部门平均值_详解MySql基本查询、连接查询、子查询、正则表达查询_MySQL...

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

  7. mysql查询男生基本情况_详解MySql基本查询、连接查询、子查询、正则表达查询...

    select * from STUDENT; 2.2.按条件查询 (1) 比较运算符 > , < ,= , != (< >),>= , <= select * fr ...

  8. mysql事务如何保证持久性_详解MySQL事务持久性实现

    所谓MySQL事务持久性就是事务一旦提交,就是永久性的,不会因为宕机等故障导致数据丢失(外力影响不保证,比如磁盘损害).持久性是保证了MySQL数据库的高可靠性(High Reliability),而 ...

  9. mysql执行事务的语句_详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

最新文章

  1. go python php 压力测试_pyLot 基于python的压力测试工具
  2. js只能输入数字,小数点(整理)
  3. 【Groovy】Groovy 脚本调用 ( Groovy 脚本中的作用域 | 本地作用域 | 绑定作用域 )
  4. php redis zset 延迟队列_PHP + Redis 实现简单消息队列
  5. 【Python】远离 Python 最差实践,避免挖坑
  6. Redis集群如何安装
  7. 全球地区资料json 含中英文 经纬度_2020年Brain Bee北京、天津、河北赛区地区赛参赛说明...
  8. (41)System Verilog输出变量时序延迟
  9. AndroidStudio新建项目报错build failed
  10. strust2 和 hibernate的整合------登录的实现
  11. bzoj1854 [Scoi2010]游戏
  12. 数控直流电压源的设计与制作【keil5 AD20]
  13. ARM指令集和X86指令集对比
  14. android局域网打印机共享文件夹,如何设置电脑使安卓手机能访问局域网共享的文件...
  15. IBM小型机更换硬盘详细步骤
  16. 阿卡迪亚大学计算机科学专业,阿卡迪亚大学世界排名解读
  17. 特效行者app手机版制作飞天特效视频的教程
  18. 【腾讯云新知实验室】一站式提供视频解决方案
  19. 软件获取imei和imsi_android平台获取手机IMSI、IMEI 、序列号和手机号的方法
  20. Bit Twiddling Hacks

热门文章

  1. 真香!原来 CLI 开发可以这么简单
  2. k8s argo workflow获取登录token的命令
  3. go使用反射reflect获取变量类型
  4. JavaFX Button和Scene点击事件代码示例
  5. 【PDF收藏】docker k8s文档整理
  6. Linux debian/deepin安装apache2(httpd)服务:文件服务器搭建
  7. linux deepin tar安装jdk8
  8. Linux开机启动服务管理
  9. AngularJS路由使用示例
  10. Java异常中受检异常非受检异常与RuntimeException异常关系