博采众长,精于一技。Live for love, work for dream.

Web开发必知的八种隔离级别

ACID性质是数据库理论中的奠基石,它定义了一个理论上可靠数据库所必须具备的四个性质:原子性,一致性,隔离性和持久性。虽然这四个性质都很重要,但是隔离性最为灵活。大部分数据库都提供了一些可供选择的隔离级别,且现在许多库都增加了附加层来创建颗粒度更细的隔离。隔离级别应用范围如此之广主要是因为放宽隔离约束往往会使得可扩展性和性能提高几个数量级。
串行一致性是可用的最古老最高的隔离级别之一,它之所以倍受青睐是因为其提供的简单编程模型,即每次仅能有一个事务对给定的资源进行操作,这就避免了很多潜在的资源问题。尽管如此,大部分应用程序(尤其是Web应用程序)都不采用这种级别非常高的隔离,因为从终端用户的角度来看这是不切实际的-任何一个拥有大量用户群的应用程序在访问共享资源时都将会有几分钟的延迟,而这会使得用户量迅速减少。弱一致性和最终一致性在大规模分布式数据源中,例如Web中,随处可见。好几个成功的大型Web应用(例如,eBay和Amazon)都显示出乐观的(optimistic)弱一致性要比传统悲观的(pessimistic)机制在扩展性方面好得多。本文将一窥八种不同的隔离级别。学会适当的放宽数据一致性的约束,你可以在自己的应用程序中使用这八种隔离级别来获得更好的性能和可扩展性。
并发控制的主要目标是为了确保事务被隔离且不会影响到其他事务。要达到高级别的隔离需以牺牲性能为代价。并发控制可以用悲观或者乐观的机制来实现。大部分关系型数据库都使用了悲观机制来实现写入优化。悲观机制采用了锁,通过使用锁它可以阻塞一些操作或者进行某些形式的冲突检测。当一个表格,页面或是行被修改后,悲观机制中的锁可以用来阻塞其他潜在的访问修改资源的事务。然而,乐观机制并不采用任何锁,它仅仅依赖于冲突检测来维护事务隔离。乐观机制采用的冲突检测可以允许所有的读操作,并在事务结束时检验其一致性。如果检测到冲突,那么事务会进行回滚或重做。大部分web服务器都是读入优化,因此使用了乐观机制。通过允许所有的读入操作,乐观机制既可以保证很高的读写吞吐量,也可以在资源不是一直改变的情况下保证数据的一致性。
下面列出的隔离级别是用来帮助Web开发人员更好的理解他们编程模型中放置的约束,帮助系统架构师和开发人员共同讨论如何在保持必要的数据完整性的同时选择最有效的隔离级别。它们按照最少隔离(未提交读)到最多隔离(串行化)的顺序列出。

继续阅读 »

Sql语句优化注意

1.尽量不要对列名进行函数处理.而是针对后面的值进行处理
例如where col1 = -5的效率比where -col1=5的效率要高
因为后面的条件对列值进行了计算.这样的条件下优化器无法使用索引
而是要针对所有值进行计算之后才能再比较

2.尽量使用和数剧列一样的值进行操作
如果col1是数值型
那么例如where col1 = 2和where col1= '2'
则前者效率更高
因为比较字符和数值型的时候
引擎需要把两者都转化成双精度然后进行比较
这样col1上的索引就失去作用了

3.减少函数的使用
例如where col1 >= '2009-10-26' and col1 <= '2009-10-27'
和where datediff(day,col1,getdate())=0
后者因为用到函数处理.所以col1上的索引又无法使用了

4.尽量不要用OR
一般对于OR的条件
优化器一般会使用全表扫描

原文地址:http://www.hiadmin.com/sql语句优化注意/

返回顶部