我真是爱死 PostgreSQL 了。可不是要又来一场 MySQL vs PostgreSQL 激烈辩论哦。只是因为我受够了每每翻阅 MySQL documentation 时,正开心着终于找到某个 function 或什么时,赫然看到这么一行字:"This function will be available in a future release of MySQL." 真是气死老娘也。
不过哪,PostgreSQL 也得小心服侍就是了。就比如在 PostgreSQL 8.x 里的 constraint_exclusion 变数和 table inheritance partitioning 若一起使用,可以得到很好的速度,但 constraint_exclusion 在 PostgreSQL 7.x 可是没有的哦。还有还有,PostgreSQL 8.x 可以用 $$ 或 $_$ 之类的 string delimiter,PostgreSQL 7.x 可就非得用 '' 不可。害得我在那架还是 Debian Sarge Stable 的伺服器上要一个一个 function 的去改正。
最后,还发现了一件事:若一个 用 SQL 定义的 PostgreSQL function 里有用到 where condition 而这个 where condition 又用到 function argument 的话,执行的时候可有您受的:因为 Query Planner 事先 (compiling function 时)根本不知道那是什么值,因此它完全不会打算用任何 Index!!!遇到这种情况,就得用 Pl/PgSQL 来定义那个 function。代价是每回执行时都要 plan 过一次 query,但我甘愿!因为我的 function 执行时间就此从七秒降到零点七秒。呵。呵。呵。呵。呵。
No comments:
Post a Comment