[转载]不同数据库的一些优化对比
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])今天在高手温少的blog上看见的。
不同数据库DDL差别 优化 树状数据递归查询支持
[quote][b]不同数据库DDL的一点差别 [/b]
1、DB2中,竟然没有删除列的DDL语句。办法只能是删掉数据表重建,好麻烦,特别在开发过程中,好麻烦呀!
2、Oracle的DDL不能在事务中执行。
程序中需要动态创建数据表和删除表的时候必须注意,确保不在事务中执行。
这一点上,还是SQL Server 比较好。可以在事务中执行DDL语句,可以提交,可回滚
[b]一个Oracle、DB2、MS SQL Server都有的优化选项[/b]
Oracle、DB2、MS SQL Server都有的QueryHint,好像就只有一个了,他们在不同数据库的表现形式为:
Oracle:
[code]SELECT /*+ FIRST_ROWS */ * FROM T WHERE (F1 > 5)[/code]
MS SQL Server
[code]SELECT * FROM T WHERE (F1 > 5) OPTION ( FAST 10)[/code]
DB2 UDB
[code]SELECT * FROM T WHERE (F1 > 5) OPTIMIZE FOR 1 ROW[/code]
SELECT * FROM T WHERE (F1 > 5) OPTIMIZE FOR 10 ROWS注意,DB2中,单数和复数是不一样的,这是一个比较令人讨厌的特性。
我在PostgreSQL 7.4 文档中,找不到相应的优化选项,在MySQL中,应该也不会有。
[b]不同数据库对树状数据递归查询支持[/b]
Oracle对树形数据的递归查询使用Connect子句,例如:
[code]SELECT ID, PARENTID, Level
FROM TREENODE
Start With ID = 'A2'
Connect By Prior ID = ParentId[/code]
在DB2和最新的MS SQL Server 2005中也支持递归查询。SQL Server 2005和DB 2语法是相似的。
如上的SQL在DB 2中应为:
[code]WITH SUB_TABLE (ID, PARENTID, Level)
AS (
SELECT ID, PARENTID, 0 FROM TREENODE WHERE ID = 'A2'
UNION ALL
SELECT PRIOR_TAB.ID, PRIOR_TAB.PARENTID, KSQL_SUB_TABLE.Level + 1
FROM (SELECT ID, PARENTID, Level FROM TREENODE) PRIOR_TAB, SUB_TABLE
WHERE SUB_TABLE.ID = PRIOR_TAB.ParentId
)
SELECT ID, PARENTID, Level FROM SUB_TABLE[/code]
DB2中递归查询使用起来,比Oracle的麻烦。Oracle中引入了Prior关键字,使得递归查询变得简单。
MS SQL Server在最新2005的版本中,终于支持递归查询了,相比起Oracle和DB2,落后了好多年哟
[/quote]
页:
[1]
