1.InnoDB 与 MyISAM 区别:
InnoDB: 数据存储在表空间,可通过配置分开
对主键的查询性能高于其他存储引擎
内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引
插入数据,自动构建缓冲区
通过一些机制和工具真正的支持热备份
支持崩溃后的安全恢复
支持行级锁
支持外键
支持事务
MyISAM: 拥有全文索引,压缩,空间函数
不支持事务,行级锁,不支持崩溃后的安全恢复
表存储在两个文件,MYI,MYD
2.MySQL 事务处理
事务在存储引擎层实现,所以一个事务当中,有多个存储引擎是不靠谱的
在非事务的表上,执行事务操作,MySQL 不会报错。
3.索引创建原则
适合建立索引的列,应该是出现在where子句,或者连接子句中。
索引的基数越大,效果越好
对字符串进行索引,应该建立一个前缀,节省空间
为经常需要排序、分组和联合操作的字段建立索引
最左前缀匹配原则,非常重要的原则
注意事项:
复合索引遵循前缀原则
like 查询, %不能放在前面
如果索引比全表扫描慢,MySQL 会放弃索引
如果 or 前的列有索引,or 后没有,索引不会用到
列类型如果是字符串,一定要加引号,否则索引不生效
4.定位慢查询
show profile
show status
show processlist
explain
5. 唯一索引 , 普通索引, 可以有多个 null
NULL是列的默认属性,查询中包含可为null的列,对MySQL 来说更难优化
可为 null 的列需要更多的空间,当可为null的列被索引时,每个索引记录需要一个额外的字节。
主键和唯一索引区别
1) 主键是主键约束+唯一索引
2) 主键一定包含一个唯一索引,但唯一索引不是主键
3) 唯一索引列允许空值,但主键列不允许空值
4) 一个表只能有一个主键,但可以有多个唯一索引
http://blog.youkuaiyun.com/fwkjdaghappy1/article/details/7703974/
6.事务特性
原子,一致,隔离,持久(ACID)
隔离:(未提交读,提交读,可重复读,可串行化)
MVCC
7. varchar 与 char 的区别
varchar用于存储可变长度的字符串,如果长度小于等于255,用一个字节,
如果长度大于255,用2个字节存储。varchar(10)用11个,varchar(1000)用2个。
由于是变长,update 是可能需要额外的工作,页分裂。
char是定长,存储是会剔除所有末尾的空格。varchar 不会
适合存储短字符串,或者所有字符长度都差不多。
8. blog 和 text
对这2个的排序是依据每个列的最前 max_sort_length 字节而不是整个字符串进行排序。
或者可以 order by substring();
memory 引擎不支持 blog,text,这就意味着如果查询中有这2个字段,就必须使用磁盘临时表。
http://blog.youkuaiyun.com/enlyhua/article/details/53164840 数据类型
http://blog.youkuaiyun.com/enlyhua/article/details/53224997 约束
http://blog.youkuaiyun.com/enlyhua/article/details/53232236 操作