热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搞定mysql优化,十分钟就够了

缓存设置有的被频繁执行的sql语句,比较消耗时间、消耗系统资源(没的优化可做)并且每次获得数据还不太发生变化那么就把这个sql语句获得信息给缓存起来,供后续执行使用这样非常节省系

缓存设置

有的被频繁执行的sql语句,比较消耗时间、消耗系统资源(没的优化可做)

并且每次获得数据还不太发生变化

那么就把这个sql语句获得信息给缓存起来,供后续执行使用

这样非常节省系统资源。

1. 具体使用

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

2. 缓存失效

数据表的数据有变化 或者 数据表结构有变化,则缓存失效。

搞定mysql优化,十分钟就够了

3. 什么情况不使用缓存

sql语句每次获得数据有变化。

例如有 时间信息、随机数等

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

4. 生成多个缓存

生成缓存的sql语句对"空格"、"大小写"比较敏感

相同结果的sql语句,由于空格、大小写问题就会分别生成缓存。

搞定mysql优化,十分钟就够了

5. 不使用缓存

sql_no_cache 不进行缓存

搞定mysql优化,十分钟就够了

6. 查看缓存空间使用情况

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

分表设计

一个数据表里边存储的记录信息太多了,记录的条数达到1-2亿条信息。

这是该数据表的活性就大大降低,数据表的运行速度就比较慢、效率低下,影响mysql数据库的整体性能。

现在设置一个水平分割,把许多的记录信息分别存储到不同的数据表里边,这样每个表存储的记录就比较少,该表的活性大大提高。

分表设计的两种模式:

① 逻辑方式分表

mysql数据库本身就有分表技术,该方式的分表可以节省php的逻辑处理。

搞定mysql优化,十分钟就够了

② 物理方式分表

自己手动创建多个数据表出来

php程序需要考虑分表算法:数据往哪个表写,从哪个表读

搞定mysql优化,十分钟就够了

1. 演示逻辑分表设计

mysql本身就支持的分表技术

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

以上逻辑分表设计,在php程序里边无需设置额外算法代码,还像以往一样直接对goods数据表进行操作即可,mysql本身会考虑分表的算法。

2. 四种格式的逻辑分表

具体为:key hash ---->[求余方式]

range list ---->[范围方式]

注意:分表字段必须是主键 或 主键的一部分

2.1 key分表

partition by key(条件字段id) partitions 10;

2.2 hash分表

根据表达式/字段方式进行分表设计

partition by hash(表达式/字段) partitions 数量;

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

2.3 range分表

根据 字段/表达式 是否满足某个范围条件进行分表设计

partition by range(year(pubdate))(

partition hou70 values less than (1980),

partition hou80 values less than (1990),

partition hou90 values less than (2000),

partition hou00 values less than (2010)

)

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

2.4 list分表

根据 表达式/字段 的内容值是否在某个"列表"中进行分表设计。

partition by list(month(pubdate))(

partition spring values in (3,4,5),

partition summer values in (6,7,8),

partition autumn values in (9,10,11),

partition winter values in (12,1,2)

)

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

3. 分表管理

具体就是对已经存在的分表进行增加、减少操作。

增加分表 不会引起数据丢失。

减少分表 在range/list领域会造成数据丢失

在key/hash领域不会造成数据丢失,

这两个领会在进行减少分表的同时就把全部数据重新整合到存在的表中,

key/hash两种分表与业务逻辑关联不紧密。

3.1 增加分表

求余方式: key/hash

> alter table 表名 add partitions 数量;

范围方式: range/list

> alter table 表名 add partition(

partition 名称 values less than (常量)

partition 名称 in (n,n,n)

);

搞定mysql优化,十分钟就够了

3.2 删除分表

求余方式(key/hash):

>alter table 表名 coalesce partition 12;

删除分表不会造成数据丢失,每次分表数据都重新整合到存在的分表里边。

范围方式(range/list):

>alter table 表名 drop partition 分区名称;

删除分表会造成数据丢失

① key/hash方式不会丢失数据

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

② range/list会丢失数据

给range分表写4条记录:

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

把"hou80"的分区删除,从下图查询结果看对应分表的数据也丢失了。

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

4. 物理分表设计

搞定mysql优化,十分钟就够了

以上goods的物理分表需要增加php的算法逻辑:

需要计算记录从哪个表读、给哪个表写。

4.1 php对物理分表的操作

搞定mysql优化,十分钟就够了

5. 垂直分表

水平分表:是把一个表的全部记录信息分别存储到不同的分表之中。

垂直分表:是把一个表的全部字段分别存储到不同的表里边。

有的时候,一个数据表设计好了,里边有许多字段,但是这些字段有的是经常使用的,有的是不常用的。

例如,一个数据表有20个字段,其中10个字段是常用的,后10个字段是不常用的

那么在操作常用字段的时候,就不得不给其他不常用的字段也分配一定的资源进行操作。

数据表:

会员表: user_id 登录名 密码 邮箱 手机号码 身高 体重 性别 家庭地址 身份证号码

以上表,红色是常用的,蓝色的是不常用的

为了使得常用字段运行速度更快、效率更高,把常用字段给跳出来,因此数据表做以下设计:

会员表(主)字段:user_id 登录名 密码 邮箱 手机号码

会员表(辅)字段:user_id 身高 体重 性别 家庭地址 身份证号码

以上把会员表根据字段是否常用给分为两个表的过程就是垂直分表。

架构设计

架构设计也称为集群设计:由多台mysql服务器共同支撑网站的运行,每台服务器分担的工作就比较少,运行速度快、效率高。

mysql数据库在运行的时候一般查询/写入的sql语句比例为:7/1

并且查询消耗的资源比写入要更多。

因此可以设计一个"主从模式"的集群,与之前redis的主从模式使用模式一直。

维护备份的集群架构:

搞定mysql优化,十分钟就够了

主从模式的集群架构:

搞定mysql优化,十分钟就够了

慢查询日志收集

我们要把系统里边一些执行速度非常慢的sql语句给收起起来,并做分析优化,使得其执行速度加快。

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

搞定mysql优化,十分钟就够了

总结:

1. 水平分表设计

分的是数据记录

a) 逻辑分表

求余:key/hash 范围:range/list

创建/增加分表:新建表时、分表创建完毕还可以增加

删除分表:key/hash不会造成数据丢失

range/list能造成数据丢失

b) 物理分表

php代码需要增加算法逻辑

2. 垂直分表

分的是表的字段

3. 架构设计

架构集群有两种方式:

① 互为备份

② 主从模式[常用]


推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
author-avatar
赵月916_640
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有