WEB开发网
开发学院数据库MySQL MySQL数据库优化(五):锁 阅读

MySQL数据库优化(五):锁

 2008-06-12 11:08:04 来源:WEB开发网   
核心提示: 表级锁在下列几种情况下比页级锁和行级锁更优越:很多操作都是读表, 在严格条件的索引上读取和更新,MySQL数据库优化(五):锁(3),当更新或者删除可以用单独的索引来读取得到时:UPDATEtbl_nameSETcolumn=valueWHEREunique_key_col=key_val

表级锁在下列几种情况下比页级锁和行级锁更优越:

很多操作都是读表。

在严格条件的索引上读取和更新,当更新或者删除可以用单独的索引来读取得到时:

  UPDATEtbl_nameSETcolumn=valueWHEREunique_key_col=key_value;
  DELETEFROMtbl_nameWHEREunique_key_col=key_value;

SELECT 和 INSERT 语句并发的执行,但是只有很少的 UPDATE 和 DELETE 语句。

很多的扫描表和对全表的 GROUP BY 操作,但是没有任何写表。

表级锁和行级锁或页级锁之间的不同之处还在于:

将同时有一个写和多个读的地方做版本(例如在MySQL中的并发插入)。也就是说,数据库/表支持根据开始访问数据时间点的不同支持各种不同的试图。其它名有:时间行程,写复制,或者是按需复制。

按需复制在很多情况下比页级锁或行级锁好多了。尽管如此,最坏情况时还是比其它正常锁使用了更多的内存。

可以用应用程序级锁来代替行级锁,例如MySQL中的 GET_LOCK() 和 RELEASE_LOCK()。但它们是劝告锁(原文:These are advisory locks),因此只能用于安全可信的应用程序中。

2 锁表

为了能有快速的锁,MySQL除了 InnoDB 和 BDB 这两种存储引擎外,所有的都是用表级锁(而非页、行、列级锁)。

对于 InnoDB 和 BDB 表,MySQL只有在指定用 LOCK TABLES 锁表时才使用表级锁。在这两种表中,建议最好不要使用 LOCK TABLES,因为 InnoDB 自动采用行级锁,BDB 用页级锁来保证事务的隔离。

如果数据表很大,那么在大多数应用中表级锁会比行级锁好多了,不过这有一些陷阱。

表级锁让很多线程可以同时从数据表中读取数据,但是如果另一个线程想要写数据的话,就必须要先取得排他访问。正在更新数据时,必须要等到更新完成了,其他线程才能访问这个表。

上一页  1 2 3 4  下一页

Tags:MySQL 数据库 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接