Windows软件
WindowsBulk Crap UninstallerimFile
MySQL数据库高频面试题
如何实现索引机制?按照索引分类:B+树 Hash索引 全文索引
InnoDB和MyISAM 索引实现的区别?InnoDB 表结构、数据和索引是一个文件 .idb使用B+树实现,叶子节点保存的是每行数据聚簇索引MyISAM 表结构、数据和索引文件分开存放的 .sdi .MYD .MYI索引文件只保存所在叶节点的指针,通过指针来读取行中的数据非聚簇索引,进行回表进而查出指针对应的数据
如果表中没有创建索引,和主键I,系统回默认创建 ROW_ID 索引列
B树和B+树B树 每个节点存储的是数据B+树 存储的是数据key 而数据只在最叶子节点才存储的数据
B+树的实现原理record_type 记录类型0 普通记录1 B+树非叶子节点记录 2最小记录 3最大记录next_record 下一条记录位置
聚簇索引和非聚簇索引优缺点聚簇索引优点:排序和范围查找非常快,由于数据都是紧密相连的,可以从更少的数据块中提取数据,节省大量IO操作缺点:插入数据严重依赖插入顺序,按照主键方式插入最快,否则会出现页分裂,严重影响性能更新主键代价高,会导致被更新的行移动
限制InnoDB支持聚簇索引 MyISA ...
MySQL索引
提高操作性能的最佳方法 SELECT是在查询中测试的一个或多个列上创建索引。索引条目就像指向表行的指针,允许查询快速确定哪些行与子句中的条件匹配WHERE,并检索这些行的其他列值。可以索引所有 MySQL 数据类型。尽管为查询中可能使用的每个列创建索引可能很诱人,但不必要的索引会浪费空间和时间,让 MySQL 决定使用哪些索引。索引还增加了插入、更新和删除的成本,因为每个索引都必须更新。您必须找到合适的平衡点以使用最佳索引集实现快速查询。
索引优点
大大减少了服务器需要扫描的数据量
帮助服务器避免排序和临时表
将随机io变成顺序io
索引分类
主键
唯一
普通
全文
组合
索引数据结构
哈希表 MEMORY表
B+Tree 二叉树–红黑树–B树–B+树
技术名词回表普通索引列存储的是主键,叶子节点 存储的是主键 然后通过主键索引树查询到所要的记录select * from table where name=?
覆盖索引叶子节点 存储的是主键 查询到主键直接返回select id from table where name=?
最左匹配指的是联合(组合)索 ...
MySQL执行计划 explain详解
根据您的表、列、索引和WHERE子句中的条件的详细信息,MySQL 优化器考虑了许多技术来有效地执行 SQL 查询中涉及的查找。可以在不读取所有行的情况下执行对巨大表的查询;可以在不比较行的每个组合的情况下执行涉及多个表的连接。优化器选择执行最高效查询的一组操作称为“查询执行计划”,也称为 EXPLAIN计划。
1explain select * from table;
参数说明idselect查询的序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序
如果id相同,那么执行顺序从上到下
如果id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
id相同和不同的,同时存在:相同的可以认为是一组,从上往下顺序执行,在所有组中,id值越大,优先级越高,越先执行
select_type主要用来分辨查询的类型,是普通查询还是联合查询还是子查询
SIMPLE
简单的 select 查询,查询中不包含子查询或者UNION
PRIMARY
查询中若包含任何复杂的子部分,最外层查询则被标记为Primary
UNION
SELECT中的 ...
schema与数据类型优化
数据类型的优化
设计合适的数据类型,更小的数据通常更快
简单数据类型的操作需要更少的CPU周期(整型比字符串、日期时间、IP地址)
尽量避免使用null
实际细则
date 3个字节timestamp 4个字节枚举
合理使用范式和反范式主键的选择代理主键自然主键主键生成器
字符集的选择存储引擎的选择适当的数据冗余适当拆分垂直拆分 按照不同业务进行拆分,水平拆分 按照1-1000,10001-20000
MySQL性能优化
Mysql调优性能监控使用show profile查询剖析工具,可以指定具体的type此工具默认是禁用的,可以通过服务器变量在绘画级别动态的修改set profiling=1;当设置完成之后,在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状态变更相关的数据。select * from emp;在mysql的命令行模式下只能显示两位小数的时间,可以使用如下命令查看具体的执行时间show profiles;执行如下命令可以查看详细的每个步骤的时间:show profile for query 1;
type
all:显示所有性能信息
show profile all for query n
block io:显示块io操作的次数
show profile block io for query n
context switches:显示上下文切换次数,被动和主动
show profile context switches for query n
cpu:显示用户cpu时间、系统cpu时间
show profile cpu for quer ...
MySQL性能优化
性能监控SHOW PROFILE [TYPE]TYPE可以指定 可选值以显示特定的附加类型的信息:
ALL 显示所有信息
BLOCK IO显示块输入和输出操作的计数
CONTEXT SWITCHES显示自愿和非自愿上下文切换的计数
CPU 显示用户和系统 CPU 使用时间
IPC 显示发送和接收的消息计数
MEMORY 目前没有实施
PAGE FAULTS 显示主要和次要页面错误的计数
SOURCE 显示源代码中函数的名称,以及函数所在文件的名称和行号
SWAPS 显示交换计数
查看&设置profile12SELECT @@profiling;SET profiling = 1;
123456789SHOW PROFILES;+----------+------------+----------------------------+| Query_ID | Duration | Query |+----------+------------+----------------------------+| 1 | 0 ...
算法
时间复杂度用于评估执行程序所消耗的时间,可以估算出程序对处理器的使用程度
常见的时间复杂度有O(1)常数型;O(log n)对数型,O(n)线性型,O(nlog n)线性对数型,O(n2)平方型,O(n3)立方型,O(nk)k次方型,O(2n)指数型
空间复杂度用于评估执行程序所占用的内存空间,可以估算出程序对计算机内存的使用程度
Redis数据结构详解
Redis有哪些数据结构。list和set有什么区别?set和zset呢?zset的底层实现String(字符串)对象、List(列表)对象、Hash(哈希)对象、Set(集合)对象Zset(有序集合)Stream (流)概念SDS len 字符长度 alloc 分配空间长度 flags sds类型 buf[] 字节数组
ziplist(压缩列表)quicklist(快速链表)双向链表hash 哈希表inset 数据整合skiplist 跳表listpack 紧凑列表
事务multiexecdiscard
参考
https://www.cnblogs.com/xiaolincoding/p/15628854.htmlhttps://www.cnblogs.com/xiaolincoding/p/15628854.html
Redis持久化二种方式详解(AOF、RDB)
Redis持久化方式AOF 持久化AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。Redis默认情况是不开启AOF的。重启时再重新执行AOF文件中的命令来恢复数据。它主要解决数据持久化的实时性问题。
AOF是执行完命令后才记录日志的。为什么不先记录日志再执行命令呢?这是因为Redis在向AOF记录日志时,不会先对这些命令进行语法检查,如果先记录日志再执行命令,日志中可能记录了错误的命令,Redis使用日志回复数据时,可能会出错。正是因为执行完命令后才记录日志,所以不会阻塞当前的写操作。
但是会存在两个风险:
更执行完命令还没记录日志时,宕机了会导致数据丢失
AOF不会阻塞当前命令,但是可能会阻塞下一个操作。
AOF机制的三种写回策略 appendfsync:
always 同步写回,每个子命令执行完,都立即将日志写回磁盘。
everysec 每个命令执行完,只是先把日志写到AOF内存缓冲区,每隔一秒同步到磁盘。
no 只是先把日志写到AOF内存缓冲区, ...