安全第二天作业

N叉树的N能否人为修改:

1, 通过改变 key 值来调整

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

2, 改变页的大小

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

 

B+树中页的16kb是否可以修改:

操作系统是一页一页从磁盘读数据的,操作系统1页=4KB,操作系统从磁盘里面取数据,最少可以取出4KB。lnnoDb的一页是等于16KB,这个值是可以改的,但是,尽量改为4的倍数。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbTBfNTk0OTczMzU=,size_16,color_FFFFFF,t_70,g_se,x_16

  对于这八条数据,都是存在我们的磁盘里的,假如现在有一条sql语句select * from t1 where a = 7;

 一种思路,我们从磁盘里一个一个取出数据(每取一次涉及一次磁盘IO),取出来之后跟a=7比较,那么就需要7次磁盘IO,而磁盘IO相对于内存中运算是很耗时的,如果按照这种思路,肯定会慢死。

 换个思路,刚才我们说到,InnoDB是按照页取数据的,每页是16KB。而对于,我们这个表,有四个int类型,一个varchar类型,每个int类型4b,那它们总和近似也就20b。 InnoDB从磁盘取数据都是以页作为基本单位的,所以,它就可以一下子取出16000/20 = 800行数据,也就是说进行一次磁盘IO,就可以将这些数据加载到内存了,然后,在内存中再依次进行比较,找出我们想要的数据。要知道内存中的计算速度,相对于磁盘IO操作,要快很多很多。

 

 了解触发器和存储过程:

存储过程:是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

触发器:MySQL中的触发器也是存储在系统内部的一段程序代码,可以把它看作是一个特殊的存储过程。所不同的是,触发器无需人工调用,当程序满足定义条件时就会被MySQL自动调用。这些条件可以称为触发事件,包括INSERT、UPDATE和DELETE操作。

 

B+树是如何实现快速索引的:

实际存储的是一个结点的数据,一次IO读取一个结点,从这个结点找出下一个结点的位置再次调用IO读取,所以索引引擎是一个逻辑上的B+树。

 

 严格模式,导致mysql5.7插入用户表的方式新建用户失败,那么如何修改严格模式,让他插入成功:

解决方法:

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"

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值