二十六 管理事务处理
1.并非所有引擎都支持事务处理,如MyIASM和InnoDB,关于事务处理的几个术语:
事务(Transaction)指一组sql语句;
回退(rollback)指撤销指定SQL语句的过程;
提交(commit)指将为存储的SQL语句结果写入数据库表;
保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退。
2.管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
3.MySQL使用如下标志事务的开始:
START TRANSACTION
ROLLBACK用来回退MySQL语句。
如:
SELECT * FROM ordertotals;//显示该表不为空 START TRANSACTION;//开始事务 DELETE FROM ordertotals;//删除全部数据 ROLLBACK;//回退 SELECT * FROM ordertotals;//显示该表不空
事务处理用来管理INSERT/UPDATE/DELETE语句,不能回退CREATE/DROP操作,当然还有SELECT;
4.使用COMMIT,一般的MySQL语句都是直接针对数据库表执行和编写的,即所谓的隐含提交(implicit commit),
提交操作室自动的。在事务处理中,提交不会隐含的进行。
如:
START TRANSACTION; ; ; commit;
注意“隐含事务关闭”。
5.使用保留点。
如:SAVEPOINT delete1;
ROLLBACK TO delete1;
保留点越多越好,在事务处理完成后保留点可以自动释放。
6.更改默认的提交行为。为了使MySQL不自动提交更改,
可以:
;//直到被重新设置为真为止。
注意 autocommit 标志是针对每个连接而不是服务器的。
三十 改善性能
1.遵循MySQL的硬件建议;
2.使用过程中可能需要调优,查看当前设置,可以使用SHOW VARIABLES;SHOW STATUS等;
3.MySQL是一个对用户多线程的DBMS,如果多任务中的某一个执行缓慢,会影响所有请求的执行,
SHOW PROCESSLIST;
可以显示所有活动进程,进而执行KILL操作;
4.总是有不止一种方法编写同一条SELECT语句;
5.使用EXPLAIN语句让MySQL解释如何执行一条SQL语句;
6.一般来说,存储过程要比执行独立的各条SQL语句要快;
7.应该总是使用正确的数据类型;绝不要检索必需求还多的数据。换言之,不要使用select *(除非你真正需要某个列);
8.某些操作支持可选的DELAYED关键字,如果使用它,将把控制立即返回给调用程序,并且一旦有可能就实际执行该操作,即延迟插入;
9.在导入数据时,应该关闭自动提交。也可以删除索引,在导入完成后再重建;
10.必须索引数据库表以改善数据检索的性能。如果一个简单的WHERE子句返回结果的时间过长,则可以断定其中几个列是需要索引的对象;
11.SELECT不应该使用过多的OR条件,使用UNION连接子句代替,会看到极大的性能改善;
12.索引改善数据检索的性能,但损害数据插入、删除和更新的性能。如果某些表收集数据但是不经常被检索,在这之前不应该索引它们;
13.LIKE很慢,最好使用FULLTEXT代替;
14.最重要的规则是,每条规则在某些条件下都会被打破。