MYSQL
问题一:
1、什么是体系结构
部件 部件之间的联系。

mysql的部件
1、Connectors:mysql的客户端[各种语言,类似会员中心]
2、Connection Pools:mysql  验证合法、进程资源的建立、检索连接数量、验证权限、缓存池
3、SQL intertace:sql接口
4、Parser:mysql解析
5、Optimizer:优化
6、Caches & Buffers:缓存 和 状态
7、Pluggable Storage Engines:引擎优化
7、文件系统
8、日志系统

引擎:不用的技术 及 配套的相关功能。

关注引擎的几个方面?
1、字段类型
2、锁 方式(主要)
3、索引
4、事物(事物)

字段类型
TINYINT 微小整形 -128 127 两位
SMALLINT 小整形 -32768 32768 5位
MEDIUMINT 中等 -8288608 7位
INT 2147483688 10位

FLOAT 浮点型 小数点38位
DOUBLE 双精度浮点 小数点 308位
DATE (INT 时间应该大于 1970年)
DATETIME
TIMESTAMP 记录时间格式  yyyy-mm-dd hh:ii:ss

CHAR 定长
VARCHAR 变长

TINYBLOB 二进制存储
TINYTEXT 文本

ENUM 枚举 对象类型不易发生改变


为了避免争抢资源
锁的级别:页锁(bbP)、表锁、行锁
三种锁的特性:
表锁
行锁
页锁

【MYISAM】
表级争锁
Table_locks_immediate : Table_locks_waited = 5000 正常
Table_locks_immediate : Table_locks_waited < 5000 警戒要优化
锁的机制:
读操作-读锁 影响修改操作
修改操作-写锁 影响所有操作
行业新闻站可以使用。社交类禁止使用

并发写操作:
concurrent_insert
0 不允许
1 没有update,并id连续 允许修改
2 无条件允许修改
low-prinority-update 降低修改操作级别

索引:
B-tree索引:二叉平衡树
每个节点存的是数据行的地址

【INODB】
select 操作不加锁
锁的机制:

表锁不影响读操作;
并发写操作:
innodb——aotoinc_lockmode
0
1
2
数据表结构变更,mysql底层将会锁表。例如 alert操作
事务:
扁平化的事务-成功则都成功
带保存点的事务
BEGIN work
savepoint frist
action 操作
savepoint second

分布式事务
事务的隔离级别:
非提交读    read uncommitted    脏读:事务没有提交,事务外部查询数据,事务内部数据被提交。
提交读        read commited        不重复读:外部数据发生变化,将影响事务内同的数据。也就是说 在事务中读取的数据前后可能出现不一致的现象。
可重复读    replatetable read 默认    可重复读:外部事务的变化,对内部事务不会有任何有影响。
序列化读    幻读

【索引】

普通索引
唯一索引
全文索引
组合索引

索引的添加使用: 索引的基数很小不要使用索引,原因是索引更新代价较大,查询速度没有什么提升。
全文索引的使用:建议使用从库,然后在从库上面加上插件spindex

索引方式:
1、顺序查找  hase
2、二分
3、二叉树查找
4、平衡树杈找   任何一个子树的高度差 差1.

SQL的优化

1、count() – 计数器 总数减去少的 explen影响行数
2、关联查询
3、子查询

两个主数据库之间的互相备份:drbd    keepalived heartbeat haproxy lvs

发表评论