“N叉树”的N值在MySQL中是可以被人工调整吗?

其中有两种方法调整:

1、通过改变key值来调整

N 叉树中非叶子节点存放的是索引信息,索引包含 Key 和 Point 指针。Point 指针固定为 6 个字节,假如 Key 为 10 个字节,那么单个索引就是 16 个字节。如果 B + 树中页大小为 16 K,那么一个页就可以存储 1024 个索引,此时 N 就等于 1024。我们通过改变 Key 的大小,就可以改变 N 的值。

2、通过改变页的大小

页越大,一页存放的索引就越多,N 就越大。数据页调整后,如果数据页太小层数会太深,数据页太大,加载到内存的时间和单个数据页查询时间会提高,需要达到平衡才行。

Mysql的page页

页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB;InnoDB存储引擎从1.2.x版本碍事,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。若设置完成,则所有表中页的大小都为innodb_page_size,不可以再次对其进行修改,除非通过mysqldump导入和导出操作来产生新的库。

InnoDB逻辑存储单元主要分为表空间、段、区和页。层级关系为tablespace -> segment -> extent(64个page,1M) -> page。

innodb_page_size的官方描述:

其中:

  • 第一个系统表空间数据文件(ibdata1)的最小文件大小取决于innodb_page_size值

  • innodb_page_size只能在初始化MySQL实例之前配置,不能在之后修改。如果没有指定值,则使用默认页面大小初始化实例。

  • MySQL 5.7增加了对32KB和64KB页面大小的支持。对于32KB和64KB的页面大小,最大行长度约为16000字节。当innodb_page_size设置为32KB或64KB时,不支持ROW_FORMAT= compression。对于innodb_page_size=32k,区段大小为2MB。对于innodb_page_size=64KB,区段大小为4MB。当使用32KB或64KB的页面大小时,innodb_log_buffer_size应该至少设置为16M(默认)。

  • 默认的16KB或更大的页面大小适用于各种工作负载,特别是涉及表扫描的查询和涉及批量更新的DML操作。对于涉及许多小写操作的OLTP工作负载,较小的页面大小可能更有效,在这种工作负载中,当单个页面包含许多行时,可能会出现争用问题。对于通常使用较小块的SSD存储设备,较小的页面也可能是有效的。保持InnoDB页面大小接近存储设备块大小,可以最大限度地减少被重写到磁盘的未更改数据量。

在严格模式下导致MySQL5.7插入用户表的方式新建用户失败,如何修改严格模式让他修改成功?

mysql> set @@explicit_defaults_for_timestamp = 1;

1.此时如果 TIMESTAMP 列没有显示的指定 not null 属性,那么默认的该列可以为 null ,此时向该列中插入 null 值时,会直接记录 null 。

2.如果 TIMESTAMP 列被加上了 not null 属性,并且没有指定默认值。这时如果向表中插入记录,但是没有给该 TIMESTAMP 列指定值的时候,如果 strict sql_mode 被指定了,那么会直接报错。如果 strict sql_mode 没有被指定,那么会向该列中插入 ’0000-00-00 00:00:00’ 并且产生一个 warning 。

去掉sql_mode中的 NO_ZERO_IN_DATE,NO_ZERO_DATE 。

SQL语句:mysql> set @@sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

这里也可修改 MySQL 配置文件来去除规则,没有配置文件在 /etc/mysql 下创建 my.cnf 配置文件sudo vi /etc/mysql/my.cnf

在 [mysqld] 区域添加:sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

如:[mysqld]

sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

最后重启服务器,即可正常执行创建语句。

数据库中delect和drop的不同

Delect语句用于删除表中的行:

DELETE FROM 表名称 WHERE 列名称 = 值

删除所有航:

DELETE * FROM table_name

Drop语句,可以轻松地删除索引、表和数据库。

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):

DROP TABLE 表名称

DROP DATABASE 语句用于删除数据库:

DROP DATABASE 数据库名称

两种删除语句的区别:

1、DELETE是DML,执行DELETE操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。DROP是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、DELETE可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。DROP语句删除表结构及所有数据,并将表所占用的空间全部释放。

3、DELETE语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。DROP语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

N叉树、page_size、数据库严格模式修改、数据库中delect和drop的不同相关推荐

  1. oracle数据库归档模式修改ARCHIVELOG

    oracle数据库归档模式修改ARCHIVELOG 一.查看当前数据库的归档模式 第一步:查看oracle数据库的归档模式 命令如下:(该命令登录sys用户可查) select log_mode fr ...

  2. mysql数据库修改数据库名称_MySQL数据库之MySQL 修改数据库名称的一个新奇方法...

    本文主要向大家介绍了MySQL数据库之MySQL 修改数据库名称的一个新奇方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL在5.1引入了一个rename data ...

  3. 游标遍历所有数据库循环执行修改数据库的sql命令

    游标遍历所有数据库循环执行修改数据库的sql命令 MSSQL数据库服务器上有很多类似的数据库,需要将这些数据库统一修改其中的某些表或者某些命令,那么就会想到用游标来遍历. 先来说思路: 1,首先需要查 ...

  4. C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断...

    C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.25. ...

  5. 专业修改数据库服务器,专业修改数据库服务器

    专业修改数据库服务器 内容精选 换一换 云服务器备份在支持崩溃一致性备份的基础上,同时支持数据库备份.文件/磁盘数据在同一时间点,通过数据库备份内存数据,能够保证应用系统一致性,如包含MySQL或SA ...

  6. 数据库操作--批量修改数据库表名及字段名大小写转换及首字母大写+删除没有数据无用的表...

    1.修改表名为小写 declare @sql varchar(300)--,@rowcount varchar(10),@dyncnum int declare @tablename varchar( ...

  7. python修改数据库_python mysql修改数据库数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. oracle数据库方案模式,Oracle数据库技术服务方案.doc

    Oracle技术服务方案书 第 PAGE 2 页/总 NUMPAGES 8 页 Oracle数据库技术服务方案 (V1.0) 目录 TOC \o "1-3" \h \z HYPER ...

  9. Oracle修改数据库为非归档模式

    操作步骤如下: 步骤 1 以oracle用户登录服务器,执行以下命令进入SQLPLUS. oracle@smgwrpt:~> sqlplus "/as sysdba" 步骤 ...

最新文章

  1. hdu 1811 Rank of Tetris (并查集+拓扑排序)
  2. 人脸识别有风险,美国全面禁止,可为什么中国却全面推广?
  3. linux中的查找文件夹
  4. 3.1 Android组件intent filter
  5. WPF 实现加速小火箭~
  6. BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)
  7. Flask 第三方组件之 login
  8. html css 表头,css固定表格表头(各浏览器通用)
  9. e2 android,魅蓝E2做工怎么样?魅蓝手机E2拆机全过程图解
  10. linux装软raid,LINUX中软RAID的实现方案
  11. Flexbox 布局教程
  12. 如何写一份交互说明文档
  13. windows 驱动开发 DDK与WDK WDM的区别
  14. Java向mysql导入大量scv文件数据(100万行以上)
  15. Idea中 webservice 的调用
  16. Base64、32、16 编码解析
  17. R 语言数据处理入门-2(缺失值处理)
  18. 论文 结构图 用 visio
  19. DuckDuckGo + Alfred
  20. 产出投入表结构类型的介绍

热门文章

  1. Ubuntu20.4下x264、x265、fdk-aac和FFmpeg4.3源码编译安装
  2. Linux 初学者:如何在 Ubuntu 中重启网络
  3. JAVASE的内、外部比较器Comparable和Comparator
  4. 从零开始导入(imp),导出(dmp)Oracle数据
  5. 220523-4G一些知识
  6. 工资代发与批量付款的解决方案
  7. 海外问卷调查怎么做?手把手教会你如何薅老外的羊毛
  8. 基于Java+SpringBoot+Vue前后端分离学生管理系统设计与实现
  9. 【毕业设计】STM32电风扇智能调速器的设计【硬件+原理图+实物+论文】
  10. ​李宏毅机器学习——强化学习Reinforcement Learning