它们区别非常大~~特别是在锁和并发控制方面(我是指在大型数据库中)
下面以SQLServer为例讲用这两个控件的区别:
要谈它们的区别首先要理解SQLServer的工作原理,SQLServer的锁一般分为三级,行级
页级与表级,这三级之间的切换是透明的(也就是说前台不可控制的),但是,只要了解
了SQLServer的加锁规则及其升级规则,就可以影响它,这就是用TQuery还是用TTable的
区别了。
一般SQLServer优先选择行级锁,因为其代价最小,但是,如果它觉得用页级锁会增加某
个操作的执行速度,就会升级,同理,也可以升级到表级锁。
那么,TTable是什么工作原理呢?它在实际取数据时,类似于TTQuery中执行
Select * from Table1
一般情况下SQLServer不会将其理解为对整个表进行操作的,但是,这样的语句,有很大的
可能会引起SQLServer的误会,认为页锁或是整个表的锁更有效率,所以,它会升级到页锁
甚至表锁(这点在SQLSErver6.5中概率非常大,这是实践中的教训)
而且用TTable没有办法对于索引的利用效率也比较低,如果表中有多个索引的话这个缺点就
更明显。
而用TQuery就没有这样的麻烦。
因为用SQL语句构造的数据集是按需分配的,也就是说,减少了SQLServer误会的可能。
再有,用TQuery可以返回用存储过程中建立的数据集,
当然,它可以充分利用索引。效率更高