1. innodb表空间逻辑结构
表空间:
共享表空间:
数据库的所有表的数据和索引文件都放在一个文件下,默认的文件是 .ibdata1文件,初始值是10M,默认是存放在数据文件(data目录)的根目录下。
缺点:
1.数据表出现大量删除操作,会造成数据空隙
2.空间分配后不回缩
独享表空间:
每一张表都会生成独立的文件来进行存储,每一张表都有一个.ibd文件。其中ibd文件包括了单独一个表的数据内容和索引内容。
优点:
1.每一表都有自己独立的表空间
2.每个表的数据和索引都会存在自己的表空间中
3.可以实现单表在不同的数据库中移动
4.空间可以回收
缺点:
单表增加过大,当单表占用空间过大时,存储空间不足
show variables like "%innodb%";
| innodb_file_per_table | ON --on表示为独享表空间 off表示为共享表空间
set global innodb_file_per_table = "OFF"; // 关闭操作
错误:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
错误原因:无法连接mysql服务,没找到'/tmp/mysql.sock' 文件,重启mysql服务
解决方法:
1.查看/etc/my.cnf文件是否配置了socket = /tmp/mysql.sock,如果有
2.查看/tmp/mysql.sock是否存在,如果存在
3.重启mysql服务,即:运行 service mysql restart
错误:
刚安装的时候出现:Access denied for user 'root'@'localhost' (using password: YES)
错误原因:密码输入错误
解决方法:
1.service mysql start --重启mysql服务
2.cat /usr/local/mysql/data/error.err --进入错误日志查看密码
3.复制完整密码::VNe*we=/4-p
2022-04-01T14:55:49.369826Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: :VNe*we=/4-p
4.mysql -uroot -p --连接mysql,输入完整密码
[root@localhost data]# mysql -uroot -p Enter password:
5.修改密码 --alter user 'root'@'localhost' identified by 'root';
2. Innodb的结构与缓存池
LRU算法解释:
(1)页已经在缓冲池里,那就只做“移至” LRU头部的动作,而没有页被淘汰;
3. 平衡多路二叉树
二分法:
不断选择一个元素作为中位数比较左边的元素小于中位数,右边的元素大于中位数。
比如,下面这串数字:
1,3,5,7,9
如果我们给这个二叉树新增几个数据进去。
比如,这串数字:1,3,5,7,9,11,13
我们新增了数据11,13二叉树会随着数据的新增而进行重构,以此保证我们查询任何数据都是性能最佳的
不建议在一个表中建立太多的索引
4. Btree与B+tree的区别
Btree
Btree是一种多路平衡搜索树,它类似普通的二叉树,但是Btree运行每个节点具备更多的子节点。
B+Tree
B+Tree在Btree的基础上进行了修改,具体结构如下所示:
mysql> show variables like "innodb_page_size";--查询叶子节点的值
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.13 sec)
特点:
非叶子节点只存key的值,所有的值存在叶子节点。
PreorderTraversal.php
<?php
class PreorderTraversal
{
public $data;
private function LeftSelect($root)
{
$stack = array();
$tree = $root;
while (!empty($stack) || $tree != null) {
while ($tree != null) {
array_push($stack,$tree);
$tree = $tree["left"];
}
$tree = array_pop($stack);
$this->data[] = $tree["data"];
$tree = $tree["right"];
}
}
public function getData($root)
{
$this->LeftSelect($root);
return $this->data;
}
}
btree.php
<?php
include_once "PreorderTraversal.php";
class btree
{
public $left = null;
public $right = null;
public $tree = null;
public $parent = null;
public function AddNode($data)
{
$preorderTraversal = new PreorderTraversal();
$array = $preorderTraversal -> getData($this->tree);
$array[] = $data;
$this ->tree = $this->TreeNodeAdd($array);
}
private function TreeNodeAdd($data){
if (is_null($data)){
return;
}
sort($data);
$count = count($data);
$ceil = ceil($count/2);
$mod = $count % 2;
$root = array();
if ($mod != 0){
$ceil--;
}
if ($count == 1){
return[
'data' => $data[0],
'left' => null,
];
}elseif ($count == 2){
return[
'data' => $data[1],
"left" => [
"data" => $data[0],
"left" => null,
"right" => null,
],
"right" => null,
];
}else{
$root["data"] = $data[$ceil];
$LeftNode = array();
for ($i = 0; $i < $ceil; $i++){
if (!$data[$i] == null){
$LeftNode[] = $data[$i];
}
}
$root["left"] = $this->TreeNodeAdd($LeftNode);
$RightNode = array();
for ($i = $count-1; $i > $ceil; $i--){
if (!$data[$i] == null){
$RightNode[] = $data[$i];
}
}
$root["right"] = $this->TreeNodeAdd($RightNode);
}
return $root;
}
public function getTree()
{
return $this->tree;
}
}
index.php
<?php
include_once "btree.php";
$Btree = new btree();
$Btree->AddNode(1);
var_dump($Btree->getTree());
$Btree->AddNode(3);
var_dump($Btree->getTree());
$Btree->AddNode(5);
var_dump($Btree->getTree());
$Btree->AddNode(7);
var_dump($Btree->getTree());
$Btree->AddNode(9);
var_dump($Btree->getTree());
$Btree->AddNode(11);
var_dump($Btree->getTree());
$Btree->AddNode(13);
var_dump($Btree->getTree());