0%

索引优化

查询执行顺序

1
2
3
4
5
6
7
8
9
10
11
12
FROM <_table>	-- 两个表的笛卡尔积 vt1
-- 如果多于两个表就计算和 vt3 的笛卡尔积,重复
ON <join_condition> -- 筛选出满足条件的行 vt2
<join_type> JOIN <_table> -- 把主表被过滤的行添加回来 vt3
-- 次表无匹配的部分补 NULL
WHERE <where_condition> -- 在数据从磁盘进入内存前判断
GROUP BY <group_by_list> -- 结果集中每个组只有一行
-- 开始允许使用别名
HAVING <having_condition> -- 全部载入内存,在内存内部判断
SELECT DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>

EXPLAIN 字段

阅读全文 »

国内访问 GitHub Page 实在太慢了,Git 私服 + Nginx 搭了个镜像(mirror.yuyurbq.icu:2048)。宽带商屏蔽 80 443

偶尔访问不了应该是我在折腾宿主机(或者被拉电闸了x

-> 传送门

优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要么让子任务运行得更快。
查询的生命周期大致可以按照:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。

优化数据访问

不要请求不需要的数据

  1. 查询不需要的记录

    例如在处理分页时,应该使用 limit 限制 MySQL 只返回一页的数据,而不是向应用程序返回全部数据后,再由应用程序过滤不需要的行。

  2. 多表关联时返回全部列

    只取需要的列。

    阅读全文 »

索引类型

索引在存储引擎层实现。

扫描索引本身很快,但按索引顺序读取数据的速度通常要比顺序的全表扫描慢,因为基本是随机 I/O。

B-Tree 索引

此处的 B 是平衡,而非二叉(演化自 AVLTree )

B-Tree 作为术语使用(即使是 T-Tree 结构),多数存储引擎其实是 B+Tree 。

索引对多个值进行排序的依据是 create table 中定义索引时列的顺序。

阅读全文 »

数据类型

更小通常更好 选择不会超过范围的最小类型

简单更好 简单数据类型操作代价低

尽量避免 NULL 值 索引会变得复杂,但不要极端

阅读全文 »

步骤同之前 Padavan 添加 GoDaddy DDNS 服务

apikey 到 https://www.namesilo.com/account/api-manager 创建;

shell 脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash

MYAPIKEY="填apikey"
MYDOMAIN="域名"
MYHOST="A记录名称"
MYFULLDOMAIN="$MYHOST.$MYDOMAIN"

MYIP=`curl -s "https://api.ipify.org"`
OLDIP=$(tail -n 1 /home/root/iprecord.txt)

if ["$OLDIP" == "$MYIP"]; then
echo "Nothing happened."
exit 0
fi
echo "$MYIP" > /home/root/iprecord.txt
echo "IP has changed."

# Fetch DNS record ID
RESPONSE="$(curl -s "https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=$MYAPIKEY&domain=$MYDOMAIN")"
RECORD_ID="$(echo $RESPONSE | sed -n 's/^.*<record_id>\(.*\)<\/record_id><type>A<\/type><host>'$MYFULLDOMAIN'<\/host>.*$/\1/p')"

# Update
RESPONSE="$(curl -s "https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=xml&key=$MYAPIKEY&domain=$MYDOMAIN&rrid=$RECORD_ID&rrhost=$MYHOST&rrvalue=$MYIP&rrttl=7207")"

exit 0

问题:远程修改 iLO Web 服务器 SSL 端口到 21 后无法连接。

原因:浏览器认为不安全(http 访问 21)

解决:改回默认或者换个不冲突的。


  1. VPN 接入内网,ssh 登录 iLO。

  2. 不认 ls cat 什么的,help 说要用 showsystem1 目录是主机信息和 iLO 没啥关系。

    20200504_1

  3. show /map1 能找到一个配置文件 config1show /map1/config1 看一下,果然有 oemhp_sslport 这项 (图片是修改后的) :

    20200504_2

  4. 最后 cd /map1/config1 :

    1
    </map1/config1>hpiLO-> set oemhp_sslport=443
阅读全文 »

输入/输出流

读写字节

若一个流(对象)不能被立即访问,read 和 write 方法在执行时将被阻塞,在等待流可用的时间里,时间片分给其他线程。available 方法检查当前可读入的字节数量,可以避免阻塞:

1
2
3
4
5
int bytesAvailable = in.available();
if (bytesAvailable > 0) {
byte[] data = new byte[byteAvailable];
in.read(data);
}
阅读全文 »

HP P420i 阵列卡 ESXi 下开启 HBA 直通:

教程:https://communities.vmware.com/thread/484114

因为时间久远与现在有一些出入,故作补丁。

  1. 自检界面根据提示进入 SmartArray,删除所有已配置的硬盘,重启;

  2. 在 ESXi 管理界面启用 shell ;

  3. ssh 连接 ESXi (原教程 iLO 的延迟太痛苦了)强制开启 HBA:

    1
    esxcli ssacli cmd -q "controller slot=0 modify hbamode=on forced"

    我的机器上 hpssacli 叫 ssacli,不确定可以直接 esxcli 一下看提示;

    没有反馈就是最好的反馈,不放心就手动确认是否成功:

    1
    esxcli ssacli cmd -q "controller slot=0 show config detail"

    HBA Mode Enabled 为 True 即可;

  4. 硬盘全部插回去,然后你就会发现 ESXi 将 disks 一律当做 SAS 通信了(笑

    而且这是不可修改项 (笑

    所以只有 SAS 硬盘才能成功建立 datastore,即 SSD 无法被添加 (笑

  5. 感觉索然无味的话就回到 RAID 吧:

    1
    esxcli ssacli cmd -q "controller slot=0 modify hbamode=off"