链接管理与安全性:
每个客户端连接都在服务器进程中拥有一个线程。
MySQL5.5以及更新的版本提供了一个API,支持线程池插件,可以使用池中少量的线程服务大量的链接。
认证基于用户名、密码和原始主机信息。
并发控制:
在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题,这两种类型的锁通常被称为共享锁(shared lock)、排他锁(exclusive lock)。也叫读锁或者写锁。
锁策略:
在锁的开销和数据的安全性之间寻求平衡,一般都是在表中施加行级锁(row-level-lock)。
表锁和行级锁
事务:一组原子性的sql查询,一个独立的工作单元。如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组查询。
ACID:原子性atomicity 一致性consistency 隔离性isolation 持久性 durability
四种隔离级别:
READ UNCOMMITTED 未提交读 : 事务中的修改,即使没有提交,对于其他事务也都是可见的。事务可以读取未提交的数据,脏读。
READ COMMITTED 提交读: 大多数数据库的默认隔离级别, read committed ,但是MySQL不是。一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。
REPEATABLE READ 可重复读 : 解决了脏读的问题,保障了在同一个事务中多次读取同样的记录结果一致。解决不了幻读问题(当某个事务在读取某个范围内的记录的时候,另一个事务又在该范围内插入了新的记录)。 可重复读是MySQL默认的事务隔离级别。
SERIALIZABLE 可串行化 : serializable是最高级的隔离级别。
MVCC 多版本并发控制。
InnoDB 存储引擎:InnoDB存储引擎是MySQL的默认事务性引擎,也是最重要,最广泛的存储引擎。
MyISAM 存储引擎: 不支持事务和行级锁。奔溃后无法完全恢复。
TPS:每秒事务数。
Scherma 与数据类型优化:
存储数据选择正确的数据类型: 更小的,占用跟少的磁盘、内存和CPU缓存。简单就好,使用MySQL内建的类型来存储日期时间,使用整形存储IP地址。尽量避免NULL,
timestamp只是用datetime 一半的存储空间。但允许的时间范围小的多。
对于存储来说INT(1)和INT(20)是一样的。
BLOB和TEXT 都是为了 存贮更大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。
与其他类型不同,MySQL把每个blob和text值当作一个独立的对象处理。
MySQL提供了FROM_UNIXTIME() 函数把unix时间戳转换为日期,并提供了UNIX_TIMESTAMP() 函数把日期函数转换为unix 时间戳。
TIMESTEMP的列默认为 NOT NULL ,没有指定列的值则默认为当前时间。
mysql把BIT当作字符串类型。