Atea - Hero's Grave

面向对象,开源,框架,敏捷,云计算,NoSQL,商业智能,编程思想。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  40 随笔 :: 0 文章 :: 28 评论 :: 0 Trackbacks

限于自己的水平还未达到DBA级别,只能先以应用为主的角度读了。
也许过几个月再回来重读,会有另一番心得。


索引

约束和索引的区别
约束更是一个逻辑的概念,用来保证数据的完整性。而索引是一个数据结构,有逻辑上的概念,更是一个物理存储的方式。

默认情况下,MySQL允许非法或者不正确数据的插入或更新,或者内部将其转化为一个合法的值。如对NOT NULL的字段插入NULL,会将其更改为0再进行插入。
比如用Insert XXX SELECT语句就可以插入,但用Insert XXX values XXX则不行。
可以通过修改sql_mode参数来约束输入值合法性。

在MySQL InnoDB中,建立外键会自动给其加上索引。而在Oracle则不会,要注意手动添加索引。

B+索引适合取得的数据量少时使用。
Hash索引只能用来搜索等值的查询,而对于其他查找类型如范围查找则不能使用。

事务与锁

InnoDB的默认事务隔离级别为Repeatable Read。(Oracle是Read Committed)

对于自增列的并发插入较差。(5.1.22版后有所改善)

默认情况下InnoDB不会回滚超时引发的异常。(用JDBC则能避免此问题)

发生死锁后,InnoDB会马上回滚该事务(错误号1213),而应用程序则不用再回滚了。

Sql Server有锁升级机制,MySQL和Oracle无。

ROLLBACK TO SAVEPOINT并不会结束事务,仍然需要调用COMMIT或ROLLBACK。

TRUNCATE TABLE和DELETE的区别在于前者不能被回滚。

SERIALIABLE的事务隔离级别主要应用于InnoDB的分布式事务。

使用InnoDB不忌讳相对长时间开启事务,不会发生Oracle的Snapshot Too Old。

自动回滚会隐藏错误,尽量少用或不用。

对事务的操作,应该交由应用程序控制,而不是存储过程。

备份

热备的事务隔离级别应是Repeatable Read,从而实现数据一致性。

mysqldump参数
--single-transaction 只对InnoDB有效
--lock-tables db又有MyISAM又有InnoDB时使用
--hex-blob 能把blob等数据备份出来
mysqldump不能导出视图,需要另外导出,比如使用frm文件

其他

MyISAM特点是表锁、支持全文索引、不支持事务、【外键】。

Archive只支持INSERT和SELECT操作,非常适合存储归档数据。

查看错误日志
show variables like 'log_error';

OLAP是CPU密集型的操作,而OLTP是IO密集型的操作。

Windows下表名不区分大小写,而Linux默认大小写敏感。


http://atealxt.appspot.com/article/20110228/mysql_study_note_9787111321880_B004F9PL2O.html

posted on 2011-02-28 23:16 Atea 阅读(516) 评论(0)  编辑  收藏 所属分类: Database

只有注册用户登录后才能发表评论。


网站导航: