User-Defined Functions

1. 满足c调用规则的任何语言,编译后连接入server
2. 很快,能访问大量操作系统的功能
 
视图
1. mysql有两种算法返回数据:merge、tempTable
merge:原始表中的数据与返回数据是一对一
tempTable:有聚合、groupBy、distinct、Union等;derived table
2. 更新视图:会更新原始的base table
如果包含聚合、groupBy、distinct等不可更新
check option:保证更新的数据符合建view时where条件,否则报错
3. view的性能
Mysql中view确实可以改善性能
为每个user建个view
列的安全性:将希望对外访问的列做成public view
使用view时要benchmark,其实view并不简单,它隐藏了复杂性,创建它可能引用了其他表或视图
4. view的局限性
不支持物化视图
不支持indexed view
不保存原始的view sql,使用show create view查看到得是复杂的内部处理后的格式
Character Sets and Collations
1. Character Sets是如何解析二进制编码; Collations是cs的一系列排序规则
2. 4.1后,任何Character-base的value都有一个Character Set and Collation
3. Character-base的value可以是列的值,query中的文本,表达式的结果,用户变量等
4. 每个server、database、table都有默认的cs,character_set_server:如果没有显式声明db、table、column分别继承上面的
5. client/server通讯:character_set_client、character_set_connection、character_set_result
SET NAMES、SET CHARACTER SET可修改三者
客户端连接的cs需要和character_set_client一致:php中使用mysql_set_charset()修改
6. mysql比较两个value,先将它们转化为同样的cs,如果不能报ERROR 1267 (HY000): Illegal mix of collations
7. 不同的选择会影响性能
 
Full-text Searching
1. 只有MyISAM支持Full-text indexing:使用full-text collection,吧字符列连接起来作为一个大字符串做index
两层的b-tree:第一层key word 第二层list of document pointers指向包含keyword的full-text collections
keyword不包含:stopword和ft_min_word_len/ft_max_word_len之外的
2. 两种:Natural-Language、Boolean
3. 更容易出碎片
--没有多做研究,写的很深 看不懂
 
外键限制
1. 现在主要支持的engine是InnoDB
2. 会锁其他的表,insert子表,会锁主表(没有delete)
3. 如果确实需要检查,由server来做能提高性能
4. 可使用trigger达到目的
 
Merge table和Partition
1. Merge table将多个MyisAM表合成一个virtual table
2. 分区表底层是将数据分多个表存放,有自己index
3. partition 5.1引入,Merge很久了
4. 优点
分开静态和有变动的数据
使用物理存储接近的方式存储相关数据,优化查询
设计表,让query查询更少数据
维护大的数据卷更方便
5. drop mergeTable子表不影响;drop子表,子表没了,但是文件还在merge表还可以用
6. mergeTable对性能的影响
?需要更多的open file descriptors:即使你配置了table cache避免超出OS的per-process file-descriptor limits,mt也可能会超
create语句不会校验是否兼容:两个table定义不同,使用时会报ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn’t exist.
访问mt的query实际会查两个表,可能比访问一个表慢:范围查询影响比单个查询小;表扫描一样快;pk和unique key找到就返回;按create顺序访问子表
7. mt的优点
在数据一部分不活跃一部分活跃时,可以灵活控制:log,将旧数据移除mt
数据仓库常用到:一个表维护t级别的数据不现实,但是可以几个50G级别的表;purge旧数据用delete也很慢
对on-the-fly-table很好用,创建删除的成本很低
8. pt:与mt很像,但是一行只能存于一个partition
优点:可以确定哪些数据在那个partition;数据易于维护;数据可以物理分开;使用多硬盘更有效
缺点:
所有分区使用同一种engine
访问一个分区也会锁all partition
分区方法很少
一些engine不支持
不支持外键
不支持 load index into cache
优化器会分辨出和分区key相关的查询条件,自动使用匹配的分区查询
Distributed (XA) Transactions
1. 5.0后,部分支持分布式事务
2. 需要一个协调者,要求所有参与者准备commit,phase1;所有的参与者都ready,通知大家commit,phase2
3. 内部外部两种
4. 内部协调engine和binary logging
5. 外部
可以参与 但不能管理xa
并不是完全支持xa:xa要求connection合并入一个事务,但是5.1还做不到
最好避免xa,wan环境下网络不可知
对性能要求不高可以用xa