• mysql--重要知识点扫盲


    1、原理

    (1)有哪几种索引?
    1. 普通索引: 即针对数据库表创建索引
    2. 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值必须唯一,但允许有空值
    3. 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
    4. 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
    索引工作机制:

    数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B 树及其变种 B+树

    (2)存储引擎

    MyISAM:
    InnoDB:5.5后默认

    mysql 中 myisam 与 innodb 的区别?
    1. 事务支持

    MyISAM:强调的是性能,每次查询具有原子性,其执行数度比 InnoDB 类型更快,但是不提供事务支持。
    InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

    1. InnoDB 支持行级锁,而 MyISAM 支持表级锁.

    用户在操作myisam 表时,select,update,delete,insert 语句都会给表自动加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插入新的数据。

    1. InnoDB 支持 MVCC, 而 MyISAM 不支持
    2. InnoDB 支持外键,而 MyISAM 不支持
    3. 表主键

    MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
    InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

    1. InnoDB 不支持全文索引,而 MyISAM 支持。
    2. 可移植性、备份及恢复

    MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
    InnoDB:免费的方案可以是拷贝数据文件、备份binlog,或者用 mysqldump,在数据量达到几十 G 的时候就相对痛苦了

    1. 存储结构

    MyISAM:每个 MyISAM 在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm 文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
    InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。

    (3)事务

    事务Transactions:一组原子性的SQL语句,或一个独立工作单元
    事务日志:记录事务信息,实现undo,redo等故障恢复功能

    ACID特性:

    A:atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚
    C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态
    I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离级别,实现并发
    D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中

    2、命令

    linux上登录mysql命令:mysql -uroot -p
    列出所有数据库:show database;
    进入某数据库:use databasename;
    列出数据库中所有表:show tables;
    
    • 1
    • 2
    • 3
    • 4

    3、架构

    MHA一主两从

    MHA工作原理/主从复制原理
    1. 从宕机崩溃的master保存二进制日志事件(binlog events)
    2. 识别含有最新更新的slave
    3. 应用差异的中继日志(relay log)到其他的slave
    4. 应用从master保存的二进制日志事件(binlog events)
    5. 提升一个slave为新的master
    6. 使其他的slave连接新的master进行复制

    4、数据备份机制

    完全备份
    部分备份
    增量备份
    差异备份

    冷备
    热备
    温备

    物理备份
    逻辑备份

    cp、tar:
    快照:
    mysqldump:
    xtrabackup:
    mysqlbackup:

    5、优化

    mysql优化

    1.用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。
    2.有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。
    3.表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
    4.UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用 UNION ALL。

    UNION 和 UNION ALL 关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
    1.对重复结果的处理:UNION 在进行表链接后会筛选掉重复的记录,Union All 不会去除重复记录。
    2.对排序的处理:Union 将会按照字段的顺序进行排序;UNION ALL 只是简单的将两个结果合并后就返回。

    尽量使用可正确存储数据的最小数据类型,简单数据类型的操作通常需要更少的CPU周期;
    尽量避免NULL;

    SQL语句性能优化

    查询时,能不要就不用,尽量写全字段名
    大部分情况连接效率远大于子查询
    多表连接时,尽量小表驱动大表,即小表 join 大表
    在有大量记录的表分页时使用limit
    对于经常使用的查询,可以开启缓存
    多使用explain和profile分析查询语句
    查看慢查询日志,找出执行时间长的sql语句优化

  • 相关阅读:
    利用Aspose.Word对Word文件添加印章处理以及实现业务数据的替换处理
    SpringBoot引入外部jar包,项目打包成war包发布(亲测有效) - 第453篇
    力扣第226翻转二叉数 c++三种方法 +注释
    Shell 脚本面试指南
    【无标题】
    python各种编辑器、APP、软件下载
    基于MFC和C++的校园导航系统
    Oracle中计算除法——解决除数为零报错
    Java Spring拦截器优化实践: 专注于API路径拦截
    密码密钥硬编码检查
  • 原文地址:https://blog.csdn.net/weixin_44515412/article/details/125555840