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

高并发,高性能,高可用MySQL实战01一个sql语句如何执行,如何建表更符合业务

一个sql语句如何执行?mysql软件架构是怎么样的?mysql常用的存储引擎InnodbMyISAMMemoryArchiveInnodb是目前最流行的存储引擎,适合各种互联网业

一个sql语句如何执行?

mysql软件架构是怎么样的?



  1. mysql常用的存储引擎



  • Innodb

  • MyISAM

  • Memory

  • Archive

    Innodb是目前最流行的存储引擎,适合各种互联网业务

    查询效率非常高的业务可以考虑MyISAM

    日志信息归档可以考虑Archive,因为有压缩,磁盘利用率非常高

    临时表可以考虑memory,因为是基于内存的



  1. 软件工程中的经典架构



  • 分层架构

  • 事件驱动架构

  • 管道过滤器架构

  • 微核架构

    大型的软件往往不是单一的架构设计,而是多种混合的



  1. mysql tcp的通讯协议



  • tcp三次握手建立链接

  • 认证链接

  • 认证通过后,客户端开始与服务端进行交互

  • 断开mysql链接

  • tcp四次挥手断开tcp链接



  1. 客户端与mysql的连接方式



  • tcp/ip连接

  • 命名管道

  • 共享内存

  • unix域套接字



  1. 执行器的主要作用


  2. 存储引擎的主要作用

    存储引擎的任务是将执行器的指令落实在数据文件上

    不同存储引擎的原理和执行方法有很大的不同

一个sql语句是按照分析、优化、执行、落盘的步骤执行的,mysql8.0之后已经停用了server层的缓存


如何建表更符合业务

什么叫索引组织表



  1. 索引组织表:index organized table



  • 索引组织表不是一种 "组织表"

  • 索引组织表是由索引 "组织起来的" 表

  • InnoDB中表都是根据主键顺序组织存放的



  1. 索引

    索引是数据库中对某一列或多列的值进行预排序的数据结构

    索引可以理解为数据的目录

    InnoDB中,主键是一个特殊的索引字段

总结:InnoDB数据表均为索引组织表,索引组织表中的数据被主键的索引组织起来


B+树的B是什么意思



  1. 主流索引查找算法



  • 线性查找: 时间复杂度O(n), 从第一个数据开始逐个匹配

  • 二分查找:时间复杂度O(logN),拿出有序数列中点位置作为比较对象,根据中点数据大小,选取一半数据作为新的数列,每次可以将数据量减小一半

  • 二叉查找树:时间复杂度O(logN),使用经典的二叉树数据结构,由根节点开始查找,可能退化为线性查找,最坏时间复杂度是O(n)

  • 平衡二叉树:(avl tree/ balance tree),时间复杂度O(logN) 查找时与二叉查找树相同,增删改时,通过旋转操作,维护树的平衡,AVL树就是平衡二叉树保证不会退化成线性查找。

  • B tree:



    B树特点:



  1. B树是线性数据结构和树的结合,

  2. B树通过多数据节点大大降低了树的高度

  3. B树不需要旋转就可以保证树的平衡



  • B+ tree(B tree + 线性查找)

    因为B树对范围查找的效率非常低,所以就有了B+树,B+树是由B树发展而来的一种数据结构

    B+树的所有数据形成一个线性表

    B+树的特点是所有的数据都在叶子节点,上面的节点值存储索引



    B+树对范围查询非常的高效,因为数据都在叶子节点,只要找到范围的开始值,通过遍历链表的方式就可以找到范围内的值,而且B+树有B树的特点就是一个节点可以存储多个数据

总结:B+树是目前最主流的数据库索引算法,B+树由线性表+二叉树+B树发展而来的,B+树集成了线性表、平衡二叉树的优势

既有查询速度快的优势,又有范围查询效率高的优势,还有磁盘空间利用率高的优势


为什么说InnoDB索引即数据



  1. Innodb使用B+树作为索引的数据结构



  2. B+树的高度一般为2-4层,查找速度非常高



  3. InnoDB的索引分为聚簇索引(主索引)和辅助索引



  4. 聚簇索引





  • 根据表的主键构造一个B+树

  • 叶子节点直接存放行数据,而不是指针

  • 索引组织表中, 数据也是B+树的一部分




  1. 辅助索引



  • 每张表可以有多个辅助索引

  • 叶子节点并不包含行数据

  • 叶子节点记录了行数据的主键,用来指示行数据的位置

一个表中如果有一个主索引,两个辅助索引,那么这张表有三个B+树

所谓的回表就是通过辅助索引查到对应的主索引,在通过主索引查到对应的数据

总结:



  • InnoDB的索引分为聚簇索引(主索引)和辅助索引

  • 同层B+树节点之间为双向链表

  • 在B+树节点之内,数据条目之间为单向链表

  • 所谓索引即数据,就是把数据直接记录在了主索引里


InnoDB的数据表是如何存储的



  1. 逻辑存储结果



  2. 表空间





  • 表空间指的是数据表在硬盘上的存储空间

  • 默认,所有表的数据都存在共享表空间

  • 每个表的数据也可以放在独占表空间(ibd)文件






  • 数据段:B+树的叶子结点

  • 索引段:B+树的非叶子节点

  • InnoDB中,段由存储引擎自动管理






  • 区是由连续页组成的空间,每个页16kb,一共64个页,也就是每个区是1M

  • 一次从磁盘申请4-5个区






  • 页是InnoDB中磁盘读写的最小逻辑单位,默认16kb

  • 一个数据页就是B+树的一个节点

  • 页的大小充分考虑了机械硬派和SSD的最小单元(512B和4KB)

总结:

InnoDB的逻辑存储结构分为表空间、段、区、页、行

InnoDB的逻辑存储结构充分考虑了基于B+树的表结构

InnoDB中的页是InnoDB自身的逻辑概念,与硬件的页无关


InnoDB的数据行长什么样



  1. InnoDB中的变长列



  • 长度不固定的数据类型,VARCHAR VARBINARY BLOB TEXT

  • 变长编码下的CHAR



  1. 行溢出数据



  • 由于InnoDB每个数据页容量有限,导致数据字段也是有限的

  • 当数据字段过大时,InnoDB会使用行溢出机制

  • 行溢出机制会把超长字段放入单独开辟的数据页



  1. InnoDB行记录格式





    InnoDB用的最多的mysql5.7之后的行记录格式 Row Format




总结:


索引有哪些左侧用法(索引的注意事项)



  1. 联合索引



  • 使用两个或两个以上字段生成的索引

  • 联合索引也可以加速最左前缀的查询

  • 联合索引可以代替最左侧字段的单独索引

    使用联合索引一句话:"带头大哥不能死,中间兄弟不能丢"



  1. 字符串的前缀索引



  • 如果字符串过长,可以考虑使用前缀索引节约空间

  • 如果前缀区分度太小,可以考虑两种变通方法



  1. 倒叙存储



  2. 新建hash字段



  3. 字符串like模糊查询





  • like %关键字% like %关键字 不会走索引

  • 模糊查询只有 like 关键字%才会走索引

  • 如果mysql数据量特别大,使用模糊查询会把数据库拖垮的话,就可以使用搜索引擎,例如:es

总结:



  1. mysql有很多左侧用法

  2. 联合索引可以代替最左侧字段的单独索引

  3. 字符串的前缀索引可以节约存储空间

  4. 字符串的左模糊可以利用索引,如果是全模糊或者右模糊对性能影响比较大的可以使用搜索引擎es


如何约束数据



  1. primary key, unique key



  • 通过将数据字段设置为索引,约束数据内容

  • primary key 唯一 不为null

  • unique key 唯一

  • 唯一约束插入时的性能开销较大



  1. foreign key外键



  • 外键可以对数据的正确性实现约束


如何使用不存在的数据表-视图



  1. 视图可以在不改变原有数据表的情况下,创建一张虚拟的表

  2. 使用视图时尽量使用merge算法,而且避免无法使用merge的sql,如:union union all 聚合查询,group by having等

总结:

数据库查询效率影响最大的就是磁盘的IO。



推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 序言n前言nn第一章概述1n1.1简单插件实例——创建带孔板有限元模型2n1.2Abaqus图形界面程序开发的意义10nn第二章Python语言基础11 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
author-avatar
GZJYGZJYGZJY
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有