今天来讲一下怎么利用MySql进行库表设计

1 引擎选择

在 mysql 5.1 中,引入了新的插件式存储引擎体系结构,允许将存储引擎加载到正在运新的 mysql 服务器中。使用 mysql 插件式存储引擎体系结构,允许数据库专业人员或者设计库表的软件开发人员为特定的应用需求选择专门的存储引擎,完全不需要管理任何特殊的应用编码要求,也无需考虑所有的底层实施细节。

因此,尽管不同的存储引擎具有不同的能力,应用程序是与之分离的。此外,使用者可以在服务器、数据库和表格三个层级中存储引擎,提供了极大的灵活性。

mysql 常用的存储引擎包括 MYISAM、Innodb 和 Memory,其中各自的特点如下:

**MYISAM : **全表锁,拥有较高的执行速度,一个写请求请阻塞另外相同表格的所有读写请求,并发性能差,占用空间相对较小,mysql 5.5 及以下仅 MYISAM 支持全文索引,不支持事务。

Innodb:行级锁(SQL 都走索引查询),并发能力相对强,占用空间是 MYISAM 的 2.5 倍,不支持全文索引(5.6 开始支持),支持事务。

**Memory : **全表锁,存储在内存当中,速度快,但会占用和数据量成正比的内存空间且数据在 mysql 重启时会丢失。

基于以上特性,建议绝大部份都设置为 innodb 引擎,特殊的业务再考虑选用 MYISAM 或 Memory ,如全文索引支持或极高的执行效率等。

2 分表方法

在数据库表使用过程中,为了减小数据库服务器的负担、缩短查询时间,常常会考虑做分表设计。分表分两种,一种是纵向分表(将本来可以在同一个表的内容,人为划分存储在为多个不同结构的表)和横向分表(把大的表结构,横向切割为同样结构的不同表)。

其中,纵向分表常见的方式有根据活跃度分表、根据重要性分表等。其主要解决问题如下:

表与表之间资源争用问题;

锁争用机率小;

实现核心与非核心的分级存储,如UDB登陆库拆分成一级二级三级库;

解决了数据库同步压力问题。

横向分表是指根据某些特定的规则来划分大数据量表,如根据时间分表。其主要解决问题如下:

单表过大造成的性能问题;

单表过大造成的单服务器空间问题。

3 索引问题

索引是对数据库表中一个或多个列的值进行排序的结构,建立索引有助于更快地获取信息。 mysql 有四种不同的索引类型:

主键索此 ( PRIMARY )

唯一索引 ( UNIQUE )

普通索引 ( INDEX )

全文索引(FULLTEXT , MYISAM 及 mysql 5.6 以上的 Innodb )

建立索引的目的是加快对表中记录的查找或排序,索引也并非越多越好,因为创建索引是要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间维护索引。

在设计表或索引时,常出现以下几个问题:

少建索引或不建索引。这个问题最突出,建议建表时 DBA 可以一起协助把关。

索引滥用。滥用索引将导致写请求变慢,拖慢整体数据库的响应速度(5.5 以下的 mysql 只能用到一个索引)。

从不考虑联合索引。实际上联合索引的效率往往要比单列索引的效率更高。

非最优列选择。低选择性的字段不适合建单列索引,如 status 类型的字段。

mysql 列换行 表设计 设计_今天来讲一下怎么利用MySql进行库表设计相关推荐

  1. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net...

    Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net 1. -catalog与schema的设计区别1 ...

  2. mysql 列换行 表设计 设计_mysql 列转行的技巧(分享)

    前言: 由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式.即同一个列中存储了多个属性值(具体结构见下表). 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果 ...

  3. mysql从入门到转行图片_数据小白转行之路-MYSQL(二)

    一. MySql的基本查询语句 1. 查询全部列: 2. 查询某列或某几列 3. 列命名或重命名 4. 删除重复值 二. 指定查询 1. 表中的男性分别是谁 2. SQL的运行顺序和书写顺序不同 运行 ...

  4. xamp已有mysql端口修改依然启动不_关于xampp启动不了mysql的解决方法

    今天在xampp-control中启动不了mysql,提示说mysql service没启动,一时还真不知道怎么回事,我是在360安全卫士提示我是否将mysql设置为系统服务时选择了"否&q ...

  5. mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...

    DolphinDB提供了两种导入MySQL数据的方法:ODBC插件和MySQL插件.我们推荐使用MySQL插件导入MySQL数据,因为它的速度比ODBC导入更快,导入6.5G数据,MySQL插件的速度 ...

  6. md5后得到的32位字符串存储到mysql中太占空间了_面试官:你对MySQL高性能优化有什么规范建议?...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? 文章篇幅较长,建议先收藏再找个合适的时间阅读 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 ...

  7. mysql性能功能是什么意思_究竟是什么影响了MySQL的性能

    1.影响数据库性能的几个方面 服务器硬件 服务器系统 数据库存储引擎的选择(MySQL的插件式存储引擎) MyISAM:不支持事务,表级锁. InnoDB:事务级存储引擎,完美支持行级锁,事务ACID ...

  8. mysql 单表字段多少合适_复制信息记录表|全方位认识 mysql 系统库

    在上一期<时区信息记录表|全方位认识 mysql 系统库>中,我们详细介绍了mysql系统库中的时区信息记录表,本期我们将为大家带来系列第七篇<复制信息记录表|全方位认识 mysql ...

  9. mysql服务启动成功后卸载_安装,启动与卸载Mysql系统服务(MYSQL常见问题)

    将Mysql添加到Windows系统服务中: 1.. 安装服务. 在Windows2000下,安装完成后,并没有把MySQL安装成服务,我们必须执行下面的语句把MySQL注册为服务:installdi ...

最新文章

  1. adb命令 判断锁屏
  2. alert三秒后关闭_疏通经络后,感觉很疲倦是什么情况?
  3. 自动驾驶公交车开上苏州街头,这次不是“试运营”了,市民乘车依然免费
  4. Java并发 正确终止与恢复线程
  5. 信息系统项目管理师-项目合同管理考点笔记
  6. Java面向对象(16)--单例(Singleton)设计模式
  7. python 中求最大值问题_Python中用max()方法求最大值的介绍
  8. java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)
  9. 不同层次程序员的比较:三流比设计,一流比方法,顶级比什么?
  10. oracle集,oracle(集合门类)
  11. pytorch报错: invalid argument 0: Sizes of tensors must match except in dimension 0.
  12. 菜鸟学Linux 第100篇笔记 tomcat 之 java
  13. Python21天打卡Day13-生成器表达式
  14. 最新深度学习文本分类模型汇总(github开源)
  15. NTKO OFFICE文档控件技术资料(转载)
  16. 使用ggplot2画图
  17. python如何获得列表中某个元素的index
  18. 六大开源监测工具 你用过哪个?
  19. 传统密码学(三)——转轮密码机
  20. python视频补帧_视频补帧软件(DAIN APP)

热门文章

  1. sql-bench mysql_MySQL性能测试(一)——RHEL 7.1, MySQL 5.6.25, sql-bench
  2. Redis内部数据结构-跳跃表
  3. 小程序真机测试「启动参数」解析出错问题
  4. 微信模版消息 errmsg: 'invalid weapp pagepath hint: [OtU1OA0868a394]
  5. 重建AD域控制器的DNS服务器
  6. Spring Boot缓存注解@Cacheable、@CacheEvict、@CachePut使用
  7. spring 基于xml方式配置aop
  8. (JAVA)CollectionDemo2
  9. linux下spi有哪些函数,linux下怎么快速的使用 SPI 驱动。
  10. 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码